Обновлено 06/08/2009 15:52: короткий ответ НЕТ. Оригинальный вопрос:
Я не могу найти ссылку, которая дает рекомендации по SPWeb.Site относительно утилизации. Я рассмотрел некоторые из наиболее популярных рекомендаций по удалению объектов SharePoint:
- http://www.sharepointdevwiki.com/display/public/When+to+Dispose+SharePoint+objects
- http://msdn.microsoft.com/en-us/library/aa973248.aspx
- http://blogs.msdn.com/rogerla/archive/2008/02/12/sharepoint-2007-and-wss-3-0-dispose-patterns-by-example.aspx
К сожалению, ни одно из этих рекомендаций не упоминает SPWeb.Site. Чтобы дать некоторый контекст, я пишу публичный API расширений, который принимает SPWeb в качестве аргумента для метода i.e.:
public static void GetWebPartFromCatalog(this SPWeb web, string webPartName)
{
......
SPSite site = web.Site;
......
**OR** ??
using (SPSite site = web.Site)
{
....
}
}
Я посмотрел как метод Close() в refelector для SPWeb, который вызывается SPWeb.Dispose(), и в нем нет ничего, чтобы указать, что фактическое поле члена SPSite удалено.
Обновление: 06/08/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. Было бы очень полезно получить конкретный ответ от кого-то, кто более информирован по этому вопросу.
Обновление: 06/08/2009 14:52 Подготовлено Greg Comment Я разработал назначения m_Site и, похоже, он в конечном счете всегда передается в SPWeb через внутренние конструкторы. Например. SPWeb.OpenWeb переходит в этот к новому SPWeb(). Поэтому я уверен, что SPWeb.Site должен быть не удален, действительно может вызвать проблемы, если это было.