Как правильно использовать оператор использования с объектами SharePoint

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/14670

  •  16-10-2019
  •  | 
  •  

Вопрос

Что является наилучшей практикой с использованием оператора при работе с объектами SharePoint. Когда и как вы должны использовать оператор использования, поэтому используемые объекты утилизируются и т. Д.?

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

Решение

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

Пример создания вашего собственного экземпляра, поэтому требуется использование:

using(SPSite site = new SPSite("http://server"))
{
}

Пример использования существующего объекта из SPContext, поэтому использование не требуется:

SPWeb web = SPContext.Current.Web;
SPSite site = SPContext.Current.Site;

Пример создания собственного экземпляра SPWEB, позвонив в OpenWeb ():

using(SPWeb web = SPContext.Current.Site.OpenWeb("http://server/mywebsite"))
{
}

Кроме того, будьте осторожны, чтобы распоряжаться объектами, даже если исключение брошено, поместив вызов распоряжения в блоке, наконец,.

try
{
   site = new SPSite("http://server");
   web = site.OpenWeb();
}
catch(Exception e)
{
   //handle it
}
finally
{
   if (web != null)
      web.Dispose();

   if (site != null)
      site.Dispose();
}

Это всего лишь несколько примеров, но есть много других. Вот Хорошая ссылка.

Кроме того, вы можете использовать Spdisposecheck инструмент.

Другие советы

Существует рекомендательное руководство из Microsoft о том, когда утилизировать, какие объекты (SPSite, Spweb):http://msdn.microsoft.com/en-us/library/ee557362(v=office.14).aspx

Также есть инструмент для проверки утилизации Microsoft:http://archive.msdn.microsoft.com/spdisposecheck

Золотое правило кажется: если у вас есть объект (т.е. создал его, используя new оператор), тогда вы утилизируете это. Если объект исходит от другого объекта, созданного самой моделью объекта SharePoint, то вы этого не делаете. Используйте SpdisposeCeck, чтобы быть уверенным, как указала Лори.

Хотя приведенный выше ответ все в порядке, я просто хочу добавить кое -что для ясности.

Чтобы увидеть, необходимо ли утилизировать объект, который вы используете, вы можете проверить ссылку на MSDN класса (нажмите F1, когда курсор находится на объявлении в VS) и проверить, реализует ли класс Idisposable. Если это так, утилизируйте объект только в том случае, если вы фактически сделали объект (с новым оператором, либо методом OpenXXX () или аналогичным).

Для этих объектов никогда не требуется конструкция с финальной финальной, если вы используете оператор использования, потому что в компиляции оператор использования будет преобразован в постоянное постоянное конструкцию, как видно в последнем примере Лори. Использование оператора предпочтительнее, потому что оно гораздо более элегантно и сделает ваш код более читабельным.

Spdisposececk кажется хорошим инструментом, но с небольшим здравым смыслом вам, вероятно, не понадобится.

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