Утилизация запроса объекта SPWEB
-
09-12-2019 - |
Вопрос
Я пытаюсь понять процесс очистки объекта.
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 должны быть расположены в том же методе, который они выделяются. Это лучший метод, чтобы убедиться, что не может быть пропущена, и убедиться, что упреждение не происходит для объекта, который будет использоваться позже.
Что касается вашего кода: вы можете использовать