在我的WCF服务上调用close()会释放所有资源吗?

时间:2009-02-13 20:36:57

标签: c# wcf garbage-collection

在我的WCF服务上调用close会终止所有资源还是为GC设置它们还是应该将它设置为null?

3 个答案:

答案 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,但我认为第一个链接要好得多。

所以:使用IDisposableusing,但请谨慎使用(在这种情况下)。

设置字段通常没有区别。有一些边缘情况(例如由多个代理捕获的变量,静态字段,长寿命对象等),但通常不管它。特别是,这样做,因为理论上这可以延长生命:

if(field != null) field = null; // BAD

答案 1 :(得分:3)

答案 2 :(得分:0)

如果变量之后可以长时间访问,则只需要将变量设置为null。比如,长寿命对象或静态字段上的字段。这通常不仅适用于WCF。