【发布时间】:2009-02-13 20:36:57
【问题描述】:
在我的 WCF 服务上调用 close 会杀死所有资源还是为 GC 设置它们,还是我也应该将其设置为 null?
【问题讨论】:
标签: c# wcf garbage-collection
在我的 WCF 服务上调用 close 会杀死所有资源还是为 GC 设置它们,还是我也应该将其设置为 null?
【问题讨论】:
标签: c# wcf garbage-collection
首先,WCF 代理是IDisposable,所以您可以在某种程度上使用using:
using(var proxy = new MyProxy()) { // see below - not quite enough
// use proxy
}
不幸的是,WCF 还有一个错误的Dispose() 实现,它会定期抛出异常。但是,here's a really cool trick 让它正常工作。我也在博客上写过这个myself,但我认为第一个链接要好得多。
所以:使用IDisposable 和using,但要谨慎使用(在这种情况下)。
设置字段通常没有区别。有一些边缘情况(例如由多个委托捕获的变量、静态字段、长寿命对象等),但通常不要管它。特别是,不要这样做,因为理论上这可以延长寿命:
if(field != null) field = null; // BAD
【讨论】:
【讨论】:
如果之后很长一段时间都可以访问,您只需将变量设置为 null。比如说,一个长寿命对象上的一个字段,或者一个静态字段。一般情况下,这不仅适用于 WCF。
【讨论】: