Will calling close on my WCF service kill all resources or set them up for GC or should I set it to null also?
You only need to set a variable to null if it's going to be reachable for a long time afterwards. Say, a field on a long-lived object, or a static field. This holds in general, not just for WCF.
This is not so much a WCF question as a .NET question; see also
http://stackoverflow.com/questions/2785/setting-objects-to-null-nothing-after-use-in-dot-net
http://stackoverflow.com/questions/328743/is-disposing-this-object-enough-or-do-i-need-to-do-more
http://stackoverflow.com/questions/328743/is-disposing-this-object-enough-or-do-i-need-to-do-more
Firstly, WCF proxies are IDisposable
, so you can kind of use using
:
using(var proxy = new MyProxy()) { // see below - not quite enough
// use proxy
}
Unfortunately, WCF also has a buggy Dispose()
implementation that regularly throws exceptions. However, here's a really cool trick to get it to work correctly. I also blogged about this myself, but I think the first link is a lot better.
So: use IDisposable
and using
, but use it with caution (in this case).
Setting a field usually makes no difference. There are a few edge-cases (such as variables captured by multiple delegates, static fields, long-life objects, etc), but in general leave it alone. In particular, do not do this, as this can theoretically extend the life:
if(field != null) field = null; // BAD