在sharepoint中处理对象?

在sharepoint中处理对象?,sharepoint,Sharepoint,我读了msdn关于在中处理对象的文章 现在我真的很困惑。 考虑这个例子 SPList List = SPContext.Current.Web.Lists["DemoList"]; SPListItem Item = List.GetItemById(ItemID); 是否可以使用此选项或更好地使用: using (SPWeb web = SPContext.Current.Web) { SPList List= web.Lists["D

我读了msdn关于在中处理对象的文章

现在我真的很困惑。 考虑这个例子

SPList List = SPContext.Current.Web.Lists["DemoList"];
SPListItem Item = List.GetItemById(ItemID);
是否可以使用此选项或更好地使用:

using (SPWeb web = SPContext.Current.Web)
            {
                SPList List= web.Lists["DemoList"];
                SPListItem Item = List.GetItemById(ItemID);

             }
或者这没什么区别


谢谢

在这种情况下,您不需要处理SPWeb,因为您没有创建它。如果您负责实例化SPWeb对象和SPSite对象,则只需处置该对象

因此,在下面的实例中,您需要调用dispose或使用using语句自动ACLED dispose,因为您负责创建SPSite

void CombiningCallsBestPractice()
{
    using (SPSite siteCollection = new SPSite(SPContext.Current.Web.Url))
    {
        using (SPWeb web = siteCollection.OpenWeb())
        {
            // Perform operations on site.
        } // SPWeb object web.Dispose() automatically called.
    }  // SPSite object siteCollection.Dispose() automatically called.
}
using语句相当于在块的末尾调用web.Dispose,但更具可读性,并且不太可能忘记该处理


如果您担心SharePoint代码中是否有任何未经处理的对象,我强烈建议您使用。此工具将分析您的部件,并指出所有可能存在未曝光对象的位置。太棒了-

在这种情况下,您不需要处理SPWeb,因为您没有创建它。如果您负责实例化SPWeb对象和SPSite对象,则只需处置该对象

因此,在下面的实例中,您需要调用dispose或使用using语句自动ACLED dispose,因为您负责创建SPSite

void CombiningCallsBestPractice()
{
    using (SPSite siteCollection = new SPSite(SPContext.Current.Web.Url))
    {
        using (SPWeb web = siteCollection.OpenWeb())
        {
            // Perform operations on site.
        } // SPWeb object web.Dispose() automatically called.
    }  // SPSite object siteCollection.Dispose() automatically called.
}
using语句相当于在块的末尾调用web.Dispose,但更具可读性,并且不太可能忘记该处理

如果您担心SharePoint代码中是否有任何未经处理的对象,我强烈建议您使用。此工具将分析您的部件,并指出所有可能存在未曝光对象的位置。太棒了-

我曾经读过一篇关于SPWeb的声明,上面说SPWeb就像一个可爱的女孩——如果它不是你的,不要碰它,如果它是你的——好好照顾它

因此,如果您创建了SPWeb类的一个新实例,则必须对其进行处理。如果您从其他地方(SPContext.Current对象)获取它,请保持原样

更新 哦,我发现它有点不同:

她就像一个漂亮的女孩,如果你 看到它,就叫它。。。但是不要打断我 规则1。i、 不要叫漂亮女孩 还没有确认是独立的。。如果 她体型庞大的哺乳动物男友发现 出去,他可能会把你的牙齿打掉。这 该规则也适用于通用.NET

我曾经读过一篇关于SPWeb的声明,上面说SPWeb就像一个可爱的女孩——如果它不是你的,不要碰它,如果它是你的——好好照顾它

因此,如果您创建了SPWeb类的一个新实例,则必须对其进行处理。如果您从其他地方(SPContext.Current对象)获取它,请保持原样

更新 哦,我发现它有点不同:

她就像一个漂亮的女孩,如果你 看到它,就叫它。。。但是不要打断我 规则1。i、 不要叫漂亮女孩 还没有确认是独立的。。如果 她体型庞大的哺乳动物男友发现 出去,他可能会把你的牙齿打掉。这 该规则也适用于通用.NET


请澄清,由于您引用的链接是SharePoint 2010。。。WSS 3.0和SharePoint 2010 Foundation(本质上是WSS 4.0)之间有几处更改,其中之一是不再需要处理SPWeb对象,仅当从using块中的SPSite引用时才需要处理SPSite对象。似乎与您提供的链接有点不同步。我不确定该文档是否已过期或将被更新。但是,我多次听说SPWeb不需要dispose调用。在阅读了那篇文章之后,我不确定在什么情况下这是正确的。随着发布日期的临近,我认为会有进一步的扩展

对于上面引用的代码,正如其他人所说,由于您没有创建对象,因此不必管理对象。事实上,如果您从SPContext对象获得WSS 3.0中的SPSite和SPWeb,那么如果您处置该对象,您将遇到SharePoint问题,因为SharePoint运行时实例化了该对象

如上所述,SPDisposeChecker是一个非常有用的工具。罗杰·兰姆(Roger Lamb)也有一篇很好的文章解释了最佳实践


请澄清,由于您引用的链接是SharePoint 2010。。。WSS 3.0和SharePoint 2010 Foundation(本质上是WSS 4.0)之间有几处更改,其中之一是不再需要处理SPWeb对象,仅当从using块中的SPSite引用时才需要处理SPSite对象。似乎与您提供的链接有点不同步。我不确定该文档是否已过期或将被更新。但是,我多次听说SPWeb不需要dispose调用。在阅读了那篇文章之后,我不确定在什么情况下这是正确的。随着发布日期的临近,我认为会有进一步的扩展

在r 对于上面引用的代码,正如其他人所说,由于您没有创建对象,因此不必管理对象。事实上,如果您从SPContext对象获得WSS 3.0中的SPSite和SPWeb,那么如果您处置该对象,您将遇到SharePoint问题,因为SharePoint运行时实例化了该对象

如上所述,SPDisposeChecker是一个非常有用的工具。罗杰·兰姆(Roger Lamb)也有一篇很好的文章解释了最佳实践