Вопрос

Я пытаюсь понять процесс очистки объекта.

using (SPSite siteCollection = new SPSite(siteUrl))
{
  SPWeb site = siteCollection.RootWeb;
  foreach (SPList list in site.Lists)
  {
     if (!list.Hidden)
     {
       Console.WriteLine(list.Title);
     }
  }
}
.

Мне нужно обернуть секунду, используя против объекта SPWEB в коде выше?

Я прочитал где-то, что это не нужно, потому что упаковка, используя вокруг SPSite, будет очистить любой ребенок.

Это было полезно?

Решение

Оба объекта SPSITE и SPWEB реализуют интерфейс IDisPosable. Когда объект SPSite, наконец, получает распоряжение, он будет петлен через список и убедиться, что все объекты SPWEB, связанные с этим объектом SPSITE, также получают распоряжение.

Это может привести к предположению, что просто утилизируют все объекты SPSITE, а не утилизируют каждый отдельный объект SPWEB, будет достаточным для минимизации использования памяти. Теоретически это правильно. Но он отложит утилизацию объекта SPWEB в то время, когда объект SPSite получает распоряжен. Таким образом, утилизация не происходит сразу после того, как объект SPWEB больше не используется, но намного позже. Поэтому объекты SPSite и SPWEB должны быть расположены в том же методе, который они выделяются. Это лучший метод, чтобы убедиться, что не может быть пропущена, и убедиться, что упреждение не происходит для объекта, который будет использоваться позже.

Ссылка: http:// блоги .technet.com / b / b / stefan_gossner / archive / 2008/12/05 / Утилизация-spweb-and-spsite-objects.aspx

Что касается вашего кода: вы можете использовать Использование оператора или Наконец-то блок для утилизации объекта spweb.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top