gpt4 book ai didi

sharepoint - SPWeb.Site,你应该调用 Dispose() 吗?

转载 作者:行者123 更新时间:2023-12-03 13:31:33 25 4
gpt4 key购买 nike

更新于 2009 年 6 月 8 日 15:52 : 简答 .原始问题:

我找不到任何提供有关 指导的引用资料SPWeb.Site 关于处置。我浏览了一些关于处置 SharePoint 对象的更流行的最佳实践文档:

  • http://www.sharepointdevwiki.com/display/public/When+to+Dispose+SharePoint+objects
  • http://msdn.microsoft.com/en-us/library/aa973248.aspx
  • http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx

  • 不幸的是,这些指南都没有提到 SPWeb.Site。为了给出一些上下文,我正在编写一个公共(public)扩展 API,它接受 SPWeb 作为方法的参数,即:
    public static void GetWebPartFromCatalog(this SPWeb web, string webPartName)
    {
    ......

    SPSite site = web.Site;
    ......

    **OR** ??

    using (SPSite site = web.Site)
    {
    ....
    }
    }

    我在 SPWeb 的反射器中查看了 Close() 方法,该方法由 SPWeb.Dispose() 调用,其中没有任何内容表明实际的 SPSite 成员字段已被处理。

    更新:2009 年 6 月 8 日 13:47

    Alex's建议

    "Put it in a loop which runs 100 times and use the SPRequestStackTrace registry key described in Troubleshooting SPSite/SPWeb leaks in WSS v3 and MOSS 2007 to check that your test code is the source of the problem."


    我运行了 webpart 中包含的以下代码:
     for (int i = 0; i < 100; i++)
    {
    using (SPWeb web = SPContext.Current.Site.OpenWeb(""))
    {
    SPSite site = web.Site;
    Debug.WriteLine(site.Url);
    }
    }

    SharePoint 日志中未显示任何内容。

    虽然我会犹豫从这个幼稚的实验中得出任何真正的结论,但这表明它是 不是 处置 SPWeb.Site 所必需的。如果能从对此主题更了解的人那里得到具体的回答,那就太好了。

    更新:06/08/2009 14:52
    在 Greg 的评论的提示下,我计算出了 m_Site 的分配,看起来它最终总是通过内部构造函数传递给 SPWeb。例如。 SPWeb.OpenWeb 传入 这个到新的 SPWeb()。所以我更确定 SPWeb.Site 应该 不是 被丢弃,如果是的话,确实会引起问题。

    最佳答案

    Kirk's answer是正确的。在创建 SPWeb 之前,您必须对 SPSite 有一些句柄,这与调用 SPWeb.Site 时将拥有的 SPSite 实例相同。

    让我们考虑一下它的含义 - 如果您不控制 SPSite 的创建,但它的子网站之一是从外部代码交给您的,并且您处置该站点,当控制权返回给调用代码时,您已经处理了一个他们可能无法完成的站点!设身处地为调用代码着想:您将一个 SPWeb 传递给一个方法,当该方法完成时,您正在使用的 SPSite 已关闭。清理他们分配的资源始终是实例化者的责任。在这种情况下不要丢弃 SPSite。

    关于sharepoint - SPWeb.Site,你应该调用 Dispose() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237862/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com