Thanks Sezai, I'll try and get a test lab setup to answer this once and for all...
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Sezai KOMUR Sent: Wednesday, 26 March 2008 4:43 PM To: [email protected] Subject: [OzMOSS] RE: Object Disposal in Feature Receivers Yes it's confusing for Feature Receivers. Read the first comment here, someone states its appropriate to use dispose on SPWeb in a SPFeatureReceiver, because "you're getting a new instance of SPWeb" http://weblogs.asp.net/bsimser/archive/2008/02/25/getting-sites-and-webs-during-feature-activation-in-sharepoint.aspx Although, the example on that page does not use dispose. Still I am not 100% sure or convinced you have to dispose in case of using properties.Feature.Parent in a Feature Receiver. To determine for sure try setting up a test involving deployment of many Feature Receivers that don't dispose the SPWeb, fire all the receivers continuously and then monitor the memory usage on your server. It might take a while to setup a test like that, and you would want to run it on a fresh farm in case other custom object model code is causing memory leaks. Sezai Kömür Senior Developer - BEng, BSc - Microsoft Certified Technology Specialist - http://www.moss2007.com.au/ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Lee Marriage Sent: Wednesday, 26 March 2008 2:16 PM To: [email protected] Subject: [OzMOSS] RE: Object Disposal in Feature Receivers Thanks guys, I understand the basic concepts that you outline of when to dispose and when not to dispose but I guess what I was after was more detail to understand this specific 'FeatureReceiver' scenario; so to recap. Good SPWeb web = siteCollection.OpenWeb(); //Do Some stuff with web Web.Dispose(); * or by wrapping the code with the using() { } statement. Not Good SPWeb web = SPContext.Current.Web; Web.Dispose(); This article http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx states that the objects returned by methods 'GetContextSite' and 'GetContextWeb' as well as the properties 'SPContext.Current.Site', 'SPContext.Site', 'SPContext.Current.Web' & 'SPContext.Web' do not require explicit disposal. All good I won't go disposing those. However, the article also shows another example where a call to the 'ParentWeb' property of a web returns an SPWeb object that does require disposing. So going back to the question; does the object returned by the call to the SPFeature's 'Parent' property require disposal? In the following sample SPWeb myweb = (SPWeb)properties.Feature.Parent; An SPWeb object is created (myweb) by calling the SPFeature.Parent property and casting it as SPWeb. So as we are creating the SPWeb object (myweb) best practices states that we should close this object using myweb.Dispose() method. But if my understanding of Michael and Sezai's responses is correct then I shouldn't myweb.Dispose() because the SPFeature is a shared resource (like SPContext or SPControl) so SharePoint will take care of the disposal? Is this correct or am I confusing myself further :) From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Sezai KOMUR Sent: Wednesday, 26 March 2008 1:22 PM To: [email protected] Subject: [OzMOSS] RE: Object Disposal in Feature Receivers Michael is right, at times you don't need to dispose of SharePoint objects is if you are writing code that will run in-context of a SharePoint Site, so a web part or control added to a sharepoint site which may programmatically access SPWeb as a shared resource you don't need to dispose the object. On the other hand if you are creating a SharePoint Context programmatically, say in a console app or a winforms app then your MUST remember to dispose of objects correctly as SharePoint won't do it for you. http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.spweb.dispose.aspx If you create an SPWeb object, you can use the Dispose method to close the object. However, if you have a reference to a shared resource, such as when the object is provided by the SPControl.GetContextWeb<http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.spcontrol.getcontextweb.aspx?ref=ZindeShop.Com> method, do not use the Dispose method to close the object, but instead allow Windows SharePoint Services or your portal application to manage the object. A page with links to other related resources discussing memory issues caused by custom SharePoint development - http://www.21apps.com/2008/02/sharepoint-ate-all-my-memory-dealing.html Sezai Kömür Senior Developer - BEng, BSc - Microsoft Certified Technology Specialist - http://www.moss2007.com.au/ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Michael Nemtsev Sent: Wednesday, 26 March 2008 10:10 AM To: [email protected] Subject: [OzMOSS] RE: Object Disposal in Feature Receivers AFAIK it's not the case where u should dispose your resources. There are a few cases to dispose SPWeb, but feature not the case Michael Nemtsev Readify | Senior Developer Microsoft MVP [.NET/C#] Tel: +61 424 184 978 | Email: [EMAIL PROTECTED]<mailto:[EMAIL PROTECTED]> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Lee Marriage Sent: Wednesday, March 26, 2008 11:26 AM To: [email protected] Subject: [OzMOSS] Object Disposal in Feature Receivers A question on object disposal which has sparked a little debate. When calling the FeatureActivated method, the object to the parent site can be found at 'properties.Feature.Parent'. Best practices for using objects which implement the IDisposable interface say to call the Dispose() method when finished using the object. For example: using (SPWeb web = (SPWeb)properties.Feature.Parent) { //.... Do something here } or this way: SPWeb web = (SPWeb)properties.Feature.Parent web.Dispose(); However having read this article http://msdn2.microsoft.com/en-us/library/aa973248.aspx and seen many examples on the www where the 'properties.Feature.Parent' isn't explicitly disposed a debate has been sparked as to whether or not getting the web (or site) using 'properties.Feature.Parent' requires disposal in the aforementioned manner? So what says you; to dispose or not to dispose? Cheers, Lee Marriage ------------------------------------------------------------------- OzMOSS.com - to unsubscribe from this list, send a message back to the list with 'unsubscribe' as the subject. Powered by mailenable.com ------------------------------------------------------------------- OzMOSS.com - to unsubscribe from this list, send a message back to the list with 'unsubscribe' as the subject. Powered by mailenable.com ------------------------------------------------------------------- OzMOSS.com - to unsubscribe from this list, send a message back to the list with 'unsubscribe' as the subject. Powered by mailenable.com ------------------------------------------------------------------- OzMOSS.com - to unsubscribe from this list, send a message back to the list with 'unsubscribe' as the subject. Powered by mailenable.com ------------------------------------------------------------------- OzMOSS.com - to unsubscribe from this list, send a message back to the list with 'unsubscribe' as the subject. Powered by mailenable.com ------------------------------------------------------------------- OzMOSS.com - to unsubscribe from this list, send a message back to the list with 'unsubscribe' as the subject. Powered by mailenable.com
