如果我将SPContext.Current.Site.OpenWeb().Title
分配给字符串,是否需要处理它(如果可能)?
string title = SPContext.Current.Site.OpenWeb().Title;
我在处理sp对象时仍然有点模糊,所以我总是处理我的SPWeb
和SPSite
个对象...但是,如果我不指定上面的语句首先是对象,我需要处理吗?我也理解在某些情况下使用Current消除了处理的需要。
感谢。
答案 0 :(得分:3)
实际上,这是处理冗余的边缘情况。这不会导致任何问题,所以养成这个习惯没有坏处,所以你可以暂时把它留在那里。这是多余的,因为任何使用openweb打开的网将在处理所有的spsite时自动处理。您拥有的上下文网站不,因此将来某个时候它将由sharepoint处理,以及通过openweb打开的所有网站。
不相信者:看一下反射器中的openweb代码来验证。
答案 1 :(得分:2)
一般来说,无论是否保存引用都无关紧要 - OpenWeb
在内存中创建一个新的SPWeb
对象,它应该被处理掉。对于所有IDisposable
对象都是如此,不仅仅是在SharePoint中 - 不是引用会产生影响,或者垃圾收集器可以释放该内存。
您应该将代码更改为:
string title = null;
using(SPWeb web = SPContext.Current.Site.OpenWeb())
{
title = web.Title;
}
理论上,如果你创建了一个新的SPSite
,你也应该将它处理掉,但是当它来自SPContext.Current
时 - 这些对象可以与其他组件共享。
答案 2 :(得分:2)
除了Kobi的answer之外,请阅读Microsoft的Best Practices: Using Disposable Windows SharePoint Services Objects。另外,请务必使用Microsoft的SharePoint Dispose Checker Tool自动检查您的代码。