在我的WCF服务上调用close会终止所有资源还是为GC设置它们还是应该将它设置为null?
答案 0 :(得分:5)
首先,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
答案 1 :(得分:3)
这不是一个作为.NET问题的WCF问题;另见
Setting Objects to Null/Nothing after use in .NET
Is disposing this object, enough? or do i need to do more?
In the Dispose(bool) method implementation, Shouldn't one set members to null?
答案 2 :(得分:0)
如果变量之后可以长时间访问,则只需要将变量设置为null。比如,长寿命对象或静态字段上的字段。这通常不仅适用于WCF。