Обновлено 08.06.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 в качестве аргумента метода, то есть:
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
По предложению Алекса
"Put it in a loop which runs 100 times and use the SPRequestStackTrace registry key described in Troubleshooting SPSite/SPWeb leaks in WSS v3 and MOSS 2007 to check that your test code is the source of the problem."
Я запустил следующий фрагмент кода, включенный в веб-часть:
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 не удаляться, ведь в противном случае могут возникнуть проблемы.