Утечка памяти в SharePoint - PullRequest
       14

Утечка памяти в SharePoint

5 голосов
/ 24 февраля 2011

Содержит ли это утечку памяти? Я пытался лучше понять утечки памяти, но я не могу сказать, исправил ли я это? Если нет, то как правильно избавиться от объекта 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 ]

14 голосов
/ 24 февраля 2011

Да, это так. Вы избавляетесь от 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.

Несколько стилистических замечаний:

  • Пожалуйста, не используйте Systems Hungarian в коде C # . Просто list.
  • Комментарии, которые перефразируют код выше, не имеют никакого смысла. Сохраняйте их конструктивными, т. Е. Объясняя назначение кода. Вместо этих четырех комментариев вы должны были написать что-то вроде этого в начале:

    // Populate drop-down list with list names and save them in ViewState
    
2 голосов
/ 24 февраля 2011

Вы не используете объект SPSite при использовании, только SPWeb.

0 голосов
/ 29 июня 2011

Другие ответили на ваш вопрос, но я добавлю, что вы должны запускать свои сборки через SPDisposeCheck: http://archive.msdn.microsoft.com/SPDisposeCheck
Она не идеальна, но она рано предупредит вас о многих проблемах.

...