Как правильно утилизировать объекты SP, хотя они не назначены? - PullRequest
1 голос
/ 07 сентября 2010

Если я присваиваю SPContext.Current.Site.OpenWeb().Title строке, нужно ли ее утилизировать (если это возможно)?

string title = SPContext.Current.Site.OpenWeb().Title;

Я все еще немного размышляю о том, когда удалять объекты sp, поэтому я всегда избавляюсь от своих SPWeb и SPSite объектов ... Но, если я сначала не назначу объект выше для объекта мне нужно что-нибудь делать? Я также понимаю, что в некоторых случаях использование Current избавляет от необходимости утилизировать.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 08 сентября 2010

На самом деле это крайний случай, когда утилизация избыточна.Это не вызовет никаких проблем, так что вредная привычка не повредит, так что вы можете оставить ее там на мгновение.Это избыточно, потому что любые веб-сайты, открывающиеся с использованием openweb, будут автоматически удаляться при удалении сайта-владельца.Сайт контекста не принадлежит вам, поэтому он будет удален sharepoint в будущем, вместе со всеми веб-сайтами, открытыми через openweb

неверующие: взгляните на код openweb в отражателе, чтобы проверить.

2 голосов
/ 08 сентября 2010

В дополнение к Коби ответ прочитайте Рекомендации: использование одноразовых объектов Windows SharePoint Services от Microsoft.Кроме того, не забудьте автоматически проверить свой код с помощью Microsoft SharePoint Dispose Checker Tool .

2 голосов
/ 07 сентября 2010

Вообще говоря, не имеет значения, сохраняете ли вы ссылку или нет - OpenWeb создает новый объект SPWeb в памяти, и его следует утилизировать. Это верно для всех IDisposable объектов, не только в SharePoint - это не ссылка , которая имеет значение, или сборщик мусора может освободить эту память.

Вы должны изменить свой код на:

string title = null;
using(SPWeb web = SPContext.Current.Site.OpenWeb())
{
    title = web.Title;
}

Теоретически, если бы вы создали новый SPSite, вы должны были бы также утилизировать его, но не тогда, когда он приходит из SPContext.Current - эти объекты могут использоваться совместно с другими компонентами.

...