获取Sharepoint对象时不使用“using”是否可以?

时间:2014-04-08 09:02:20

标签: sharepoint

SPWeb对象为例。我已经看到它可以通过以下任何一种方式获得:

(1)

SPWeb web = new SPSite(SPContext.Current.Site.ID).OpenWeb();

(2)

SPWeb web = SPContext.Current.Web;

(3)

using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
    using (SPWeb web = site.OpenWeb())
    {
        //use the web object here
    }
}

(1),(2)和(3)最终是否相同?如果没有,哪种方式更好,相对差异/优势/劣势是什么?我错过了更好的方法吗?

2 个答案:

答案 0 :(得分:0)

As a general rule您应始终将实现IDisposable的所有对象包装起来以避免浪费资源。所以(1)肯定是不好的做法,(3)是好的。

至于(2)SPContext对象由SharePoint服务管理,绝不应处理。建议避免直接使用它们,而是使用模式(3)。您无法完全控制该对象,如果需要使用RunWithElevatedPrivileges,还需要创建自己的SPSite / SPWeb。 See for details

所以,总结一下,总是坚持模式(3)。

答案 1 :(得分:0)

创建SPSite和SPWeb对象时,必须始终处置它们。完成使用后,SPWeb是一个COM对象和垃圾收集器,不是清理内存。 有关详细信息,请阅读此最佳实践文章:Best Practices: Using Disposable Windows SharePoint Services Objects