SPSite site = new SPSite(SPContext.Current.Web.Url) vs SPContext.Current.Web.Site

后端 未结 3 1305
旧巷少年郎
旧巷少年郎 2021-02-02 15:17

Why do some SharePoint examples use

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
    ...
}

and not just simply?



        
3条回答
  •  孤独总比滥情好
    2021-02-02 16:10

    Take a look at the best practices documentation on disposing objects in SharePoint 2010 from Microsoft, however there are opposing views.

    There are a few key takeaways for SharePoint projects:

    • Always dispose your SPWeb / SPSite objects --> memory leaks
    • Make use of SPContext.Current... when you are sure your code is running in a SharePoint context
      • Unit Tests mean no Sharepoint context
      • External utilities mean no Sharepoint context
      • Powershell means no SharePoint context (e.g. activating a feature with feature receiver might fail)
    • Do not dispose SPContext.Current... but create your own object (again using)

    You might have problems with consistency with your multiple SP.. objects.

    In the end SPSite site = SPContext.Current.Web.Site; is fine in some instances, but you do not have control over this site object - that might be the problem. If you go for new SPSite(...) you will always have your SPSite and not something SharePoint created and managed for you.

    Personally I almost always go for the using structure so all objects are disposed properly afterwards. Alternatively I use SPContext.Current.Web without disposing.

提交回复
热议问题