MSDN > 論壇首頁 > SharePoint - Development and Programming > Dispose SPWeb object inside Feature Receiver? Or don't?
發問發問
 

已答覆Dispose SPWeb object inside Feature Receiver? Or don't?

  • Monday, 8 September, 2008 19:22PSeale 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     包含代碼
    All,

    Is there an authoritative source of information telling us whether we should dispose SPWeb objects retrieved inside a feature receiver, specifically something like:

    public override void FeatureActivated(SPFeatureReceiverProperties properties) 
        //should this be in a using block? 
        SPWeb web = properties.Feature.Parent as SPWeb; 

    I have my opinion, and I'm sure you all have your opinion, but...does anyone really know?

    Also before you start, I'll pre-empt you and link to Roger Lamb's post on the subject. He doesn't cover Feature Receivers specifically:
    http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx

解答

  • Monday, 8 September, 2008 20:18Tony Testa MVPMVP使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    I just looked at some old event handlers i wrote and I always cleaned up the SPWeb object.

    BUT if your using properties.feature.parent, you would NOT want to kill the object because you would be killing the object that is running your code, same as in a webpart, you won't want to kill the SPContext.Current.Web object because its running your webpart.

    Typically in my event handlers I need to run code elevated, so i create the SPWeb or SPSite objects inside the elevated code and use the ID or URL from the properties collection to create the objects, that way I am creating new objects and can dispose of them knowing that I am not killing the object that is running my code.

所有回覆

  • Monday, 8 September, 2008 19:46Rich Finn [WW] 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    I know I normally don't dispose of the Feature.Parent, but would be a good thing to be certain on.  My thought was that it's kinda similar to the Feature context, so don't dispose.

    -Rich
    Rich Finn - http://blog.richfinn.net
  • Monday, 8 September, 2008 20:18Tony Testa MVPMVP使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     已答覆
    I just looked at some old event handlers i wrote and I always cleaned up the SPWeb object.

    BUT if your using properties.feature.parent, you would NOT want to kill the object because you would be killing the object that is running your code, same as in a webpart, you won't want to kill the SPContext.Current.Web object because its running your webpart.

    Typically in my event handlers I need to run code elevated, so i create the SPWeb or SPSite objects inside the elevated code and use the ID or URL from the properties collection to create the objects, that way I am creating new objects and can dispose of them knowing that I am not killing the object that is running my code.
  • Monday, 8 September, 2008 20:25Michael Washam - MSFTMSFT, 版主使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Tony is correct. Do not dispose properties.Feature.Parent..

    However, if you use .ParentWeb or anything else the same rules apply..

    P.S. I'll let Roger know he missed one :)

    Posting is provided "AS IS" with no warranties, and confers no rights.
  • Monday, 8 September, 2008 22:00PSeale 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Thanks all
  • Tuesday, 9 September, 2008 0:59Jeremy Thake 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    For others finding this post, there is also a full set of best practices around Disposing the SharePoint objects here:

    http://msdn.microsoft.com/en-us/library/aa973248.aspx

    Cheers,
    Jeremy Thake

    SharePoint Solution Architect, Perth Australia - http://wss.made4the.net/
  • Friday, 15 May, 2009 18:12dereck doe 使用者勳章使用者勳章使用者勳章使用者勳章使用者勳章
     
    Microsoft has also published a couple of articles about coding best practices for SharePoint, including disposing of SharePoint objects. 

    You can find the articles here: 


    -  http://msdn.microsoft.com/en-us/library/bb687949 .aspx 


    -  http://msdn.microsoft.com/en-us/library/aa973248 .aspx

     
    I hope this will be helpful .