SharePoint内存泄漏

atr*_*joe 5 .net c# sharepoint dispose memory-leaks

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

Dan*_*mov 14

是的,确实如此.你处置SPWeb但忘记处置SPSite.
正确的方法:

using (var site = new SPSite(webUrl))
using (var web = site.OpenWeb()) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,这相当于:

using (var site = new SPSite(webUrl)) {
    using (var web = site.OpenWeb()) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

一些风格的评论:

  • +1.如果您使用SPxxx对象,这是您需要阅读的文章 - http://msdn.microsoft.com/en-us/library/aa973248.aspx (2认同)