如何正确处理SP对象虽然没有分配?

时间:2010-09-07 19:51:25

标签: sharepoint dispose

如果我将SPContext.Current.Site.OpenWeb().Title分配给字符串,是否需要处理它(如果可能)?

string title = SPContext.Current.Site.OpenWeb().Title;

我在处理sp对象时仍然有点模糊,所以我总是处理我的SPWebSPSite个对象...但是,如果我不指定上面的语句首先是对象,我需要处理吗?我也理解在某些情况下使用Current消除了处理的需要。

感谢。

3 个答案:

答案 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)

除了Kobianswer之外,请阅读Microsoft的Best Practices: Using Disposable Windows SharePoint Services Objects。另外,请务必使用Microsoft的SharePoint Dispose Checker Tool自动检查您的代码。