【问题标题】:SharePoint memory leakSharePoint 内存泄漏
【发布时间】:2011-07-03 04:43:52
【问题描述】:

这是否包含内存泄漏?我一直在努力更好地理解内存泄漏,但我不知道我是否已经纠正了这个问题?如果没有,我该如何正确处理SPweb 对象和SPSite 对象?

using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb()) //Open SP Web
{
    SPListCollection collList = oWebsite.Lists; //Open Lists

    foreach (SPList oList in collList)
    //For Each List Execute this
    {
        if (!oList.Hidden)
        //If the list is hidden do this else nothing
        {
            ListSitesDropDownBox.Items.Add(new ListItem(SPEncode.HtmlEncode(oList.Title), SPEncode.HtmlEncode(oList.Title)));
            ViewState["Item" + counter] = SPEncode.HtmlEncode(oList.Title);
            counter++;
        }
    }
}

【问题讨论】:

    标签: c# .net sharepoint memory-leaks dispose


    【解决方案1】:

    是的,确实如此。您处理了SPWeb,但忘记处理SPSite
    正确的做法:

    using (var site = new SPSite(webUrl))
    using (var web = site.OpenWeb()) {
        // ...
    }
    

    请注意,这相当于:

    using (var site = new SPSite(webUrl)) {
        using (var web = site.OpenWeb()) {
            // ...
        }
    }
    

    但我省略了外部using 的大括号以减少代码嵌套。支撑规则与if 相同。

    一些文体评论:

    • don't use Systems Hungarian in C# code。只需list
    • 改写上述代码的评论没有任何意义。让他们保持建设性,即解释代码的目的。而不是这四个 cmets,你应该在一开始就写这样的东西:

      // Populate drop-down list with list names and save them in ViewState
      

    【讨论】:

    • +1。如果您使用 SPxxx 对象,这是您需要阅读的文章 - msdn.microsoft.com/en-us/library/aa973248.aspx
    • 你说的List是指什么?
    • 您使用匈牙利符号来命名变量,即在变量名称前加上类型名称缩写。我知道o 代表object。然而,这在 C# 中是绝对没有必要的,因为它具有强大的类型系统,而 VS 是一个强大的 IDE,具有诸如 IntelliSense 之类的功能。我建议你使用website 而不是oWebsitelist 而不是oListlists(或allLists)而不是笨拙的collList 等等。
    • @atrljoe 阅读以下内容:en.wikipedia.org/wiki/Hungarian_notation - 我仍然用匈牙利语编写代码,知道这些天它是不必要的,但它真的是出于习惯。新程序员可能还在使用它,因为阅读了大量使用它的代码示例,并认为这很正常,但事实上,这是 C# 中相当古老的做法。
    • +1 这是一个很好的答案。我喜欢你如何进入 a) 问题的答案,b) 用“使用”展示一些有用的语法糖,以及 c) 谈论编码风格。总而言之,15 行文字! ;-)
    【解决方案2】:

    其他人已经回答了您的问题,但我要补充一点,您应该通过 SPDisposeCheck 运行构建:http://archive.msdn.microsoft.com/SPDisposeCheck
    它并不完美,但它会提前提示你很多问题。

    【讨论】:

      【解决方案3】:

      你没有在你的使用中处理 SPSite 对象,只有 SPWeb。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-08
        • 2013-01-20
        • 2011-10-31
        • 2019-08-10
        • 2013-06-24
        • 2011-03-22
        相关资源
        最近更新 更多