SharePoint内存泄漏

时间:2011-02-23 23:47:21

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

这是否包含内存泄漏?我一直在努力更好地了解内存泄漏,但我不知道我是否已经纠正了这个问题?如果没有,我如何正确处理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++;
        }
    }
}

3 个答案:

答案 0 :(得分:14)

是的,确实如此。您处置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
  • 重新说明上述代码的评论没有任何意义。保持建设性,即解释代码的目的。而不是那四条评论,你应该在开头写这样的东西:

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

其他人已回答了您的问题,但我会补充说您应该通过SPDisposeCheck运行您的构建:http://archive.msdn.microsoft.com/SPDisposeCheck
它并不完美,但它会让你早早发现很多问题。