“不使用”可以吗;使用;获取Sharepoint对象时?

“不使用”可以吗;使用;获取Sharepoint对象时?,sharepoint,Sharepoint,以SPWeb对象为例。我已经看到,它可以通过以下任何一种方式获得: (一) (二) (三) (1)、(2)和(3)在最终工作方式上是否相同?如果没有,哪种方法更好,相对的区别/优势/劣势是什么?有没有我错过的更好的方法?您应该始终使用包装所有实现IDisposable的对象,以避免浪费资源。所以(1)绝对是坏习惯,(3)是好习惯 至于(2)SPContext对象是由SharePoint service管理的,永远不应该被丢弃。建议避免直接使用它们,而应遵循模式(3)。您无法完全控制该对象,如果需

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

(一)

(二)

(三)

(1)、(2)和(3)在最终工作方式上是否相同?如果没有,哪种方法更好,相对的区别/优势/劣势是什么?有没有我错过的更好的方法?

您应该始终使用包装所有实现
IDisposable
的对象,以避免浪费资源。所以(1)绝对是坏习惯,(3)是好习惯

至于(2)
SPContext
对象是由SharePoint service管理的,永远不应该被丢弃。建议避免直接使用它们,而应遵循模式(3)。您无法完全控制该对象,如果需要使用
RunWithElevatedPrivileges
您还需要创建自己的SPSite/SPWeb


所以,总而言之,始终坚持模式(3)。

在创建SPSite和SPWeb对象时,必须始终处理它们。SPWeb是一个COM对象和垃圾收集器,当您完成使用它时,它不会清理内存。 有关更多信息,请阅读此最佳实践文章:

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