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

Jan*_*ard 15 sharepoint sharepoint-2010

为什么有些SharePoint示例会使用

using (SPSite site = new SPSite(SPContext.Current.Web.Url))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

而不仅仅是简单?

SPSite site = SPContext.Current.Web.Site;
...
Run Code Online (Sandbox Code Playgroud)

更新

我想我已经把问题缩小到以下几点:

似乎我不应该SPContent.Current直接使用,除非我确定,我的代码在SharePoint中运行.但什么时候不是真的?

Den*_*s G 11

请查看有关在Microsoft SharePoint中处理对象的最佳实践文档,但是存在相反的观点.

SharePoint项目有几个关键要点:

  • 始终处置您的 SPWeb/SPSite对象 - >内存泄漏
  • 当您确定您的代码在SharePoint上下文中运行时,请使用SPContext.Current
    • 单元测试意味着没有Sharepoint上下文
    • 外部实用程序意味着没有Sharepoint上下文
    • Powershell意味着没有SharePoint上下文(例如,使用功能接收器激活功能可能会失败)
  • 不要处置SPContext.Current ...但是要创建自己的对象(再次using)

您可能遇到与多个SP ..对象的一致性问题.

最后SPSite site = SPContext.Current.Web.Site;在某些情况下很好,但你无法控制这个site对象 - 这可能是问题所在.如果您愿意,new SPSite(...)您将始终拥有自己的 SPSite SharePoint,而不是为您创建和管理SharePoint.

就个人而言,我几乎总是去寻找using结构,以便之后所有物体都妥善处理.或者我使用SPContext.Current.Web而不处理.