Обновлено 06.08.2009 15: 52 : Краткий ответ НЕТ . Оригинальный вопрос:
Я не могу найти ссылку, которая бы давала руководство по SPWeb.Site относительно утилизации. Я ознакомился с некоторыми из наиболее популярных руководств по утилизации объектов SharePoint:
К сожалению, ни одно из этих руководств не упоминает SPWeb.Site. Чтобы дать некоторый контекст, я пишу общедоступный API-интерфейс расширения, который принимает SPWeb в качестве аргумента для метода, т.е.
public static void GetWebPartFromCatalog(this SPWeb web, string webPartName)
{
......
SPSite site = web.Site;
......
**OR** ??
using (SPSite site = web.Site)
{
....
}
}
Я выглядел как метод Close () в рефлекторе для SPWeb, который вызывается SPWeb.Dispose (), и в нем нет ничего, что указывало бы на фактическое удаление поля члена SPSite.
Обновление: 08.06.2009 13: 47
В Алекс предложение
«Поместите его в цикл, который выполняется 100 раз, и используйте раздел реестра SPRequestStackTrace, описанный в разделе« Устранение утечек SPSite / SPWeb »в WSS v3 и MOSS 2007, чтобы убедиться, что ваш тестовый код является источником проблемы».
Я запустил следующий фрагмент кода, включенный в веб-часть:
for (int i = 0; i < 100; i++)
{
using (SPWeb web = SPContext.Current.Site.OpenWeb(""))
{
SPSite site = web.Site;
Debug.WriteLine(site.Url);
}
}
Ничего не появилось в журналах SharePoint.
Хотя я бы не решился сделать какие-либо реальные выводы из этого наивного эксперимента, он предположил бы, что не необходимо для утилизации SPWeb.Site. Было бы очень приятно получить конкретный ответ от кого-то более осведомленного по этому вопросу.
Обновление: 08.06.2009 14: 52
В ответ на комментарий Грега я разработал назначения m_Site, и кажется, что он всегда передается в SPWeb через внутренние конструкторы. Например. SPWeb.OpenWeb передает this новому SPWeb (). Поэтому я более уверен, что SPWeb.Site должен быть утилизирован , а не , что может привести к проблемам, если это так.