I am doing a whole bunch of things with one SPWeb and many SPLists. If I just dispose web in the
finally section would that dispose all of SPLists that I instantiated? (btw, I understand the concept of
using, so should I implement
SPList objects cannot be disposed.
I recommend installing and running this tool to check whether you are disposing your objects correctly: SPDisposeCheck
The rule is complicated, but in a nutshell, you should dispose of any object that you create yourself that implements the IDisposable interface.
In the context of SharePoint, this includes:
- Any SPSite object you create using
siteColl.OpenWeb(), returned by
SPSiteCollection.Add, by the
SPSiteCollectionindex operator, or yielded in a
- Any SPWeb object returned from
SPSite.AllWebsindex operator or yielded in an
There are many more cases outlined in the Best Practices: Using Disposable Windows SharePoint Service Objects article on TechNet.
Note that your code is unlikely to compile if you try to
Dispose an object like
SPList that doesn't implement
IDisposable, because that object will not have a
Dispose method. On the other hand, you won't get an error if you try to dispose
RootWeb, because it is an
SPWeb object with a
Dispose method - but doing this will cause problems if you try to refer to that web or any of it's children later in your code.
using statement is a bit of syntactic sugar, but I prefer to use it because it ensures that the object is always disposed correctly, and it doesn't require explicit code to ensure that this happens.