Должен ли я избавиться от SPWEB или SPLIST?
-
16-10-2019 - |
Вопрос
Я делаю целую кучу вещей с одним Spweb и многими шпиплами. Если я просто утилизирую Интернет в finally
Раздел, это утилизирует все шпипщики, которые я создал создание? (Кстати, я понимаю концепцию using
, так что я должен реализовать using
вместо?)
Решение
Объекты шпилька не могут быть утилизированы.
Другие советы
Я рекомендую установить и запустить этот инструмент, чтобы проверить, правильно ли вы утилизируете свои объекты: Spdisposecheck
Правило сложно, но в двух словах, вы должны избавиться от любого объекта, который вы создаете себя, который реализует Idisposable интерфейс.
В контексте SharePoint это включает в себя:
- Любой Spsite объект, который вы создаете, используя
siteColl.OpenWeb()
, вернулсяSPSiteCollection.Add
, посредствомSPSiteCollection[]
оператор индекса или уступил вSPSiteCollection
foreach
петля - Любой Spweb объект возвращен из
SPSite.AllWebs.Add
,SPWebCollection.Add
,SPSite.AllWebs[]
оператор индекса или уступил вSPSite.AllWebs
Foreach Loop.
Есть еще много случаев, изложенных в Лучшие практики: использование одноразовой статьи SharePoint Service Object.
Обратите внимание, что Шпатель нет в этом списке (потому что он не реализует IDisposable
, как и Splist.Rootweb (Поскольку вы не создаете объект RootWeb, вы просто получаете ссылку на него).
Обратите внимание, что ваш код вряд ли будет компилироваться, если вы попытаетесь Dispose
объект, как SPList
Это не реализует IDisposable
, потому что у этого объекта не будет Dispose
метод С другой стороны, вы не получите ошибку, если попытаетесь утилизировать RootWeb
, потому что это SPWeb
объект с Dispose
Метод - но это вызовет проблемы, если вы попытаетесь ссылаться на эту сеть или что -либо из ее детей позже в вашем коде.
А using
Заявление - это немного синтаксического сахара, но я предпочитаю использовать его, потому что он гарантирует, что объект всегда утилизируется правильно, и он не требует явного кода, чтобы убедиться, что это происходит.