以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)最终是否相同?如果没有,哪种方式更好,相对差异/优势/劣势是什么?我错过了更好的方法吗?
答案 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。