2012-01-09 3 views
4

Мне нужно реорганизовать некоторый код sharepoint 2010 из моего колледжа. Everytime он должен получить доступ к списку, он делает это:Какая разница между SPContext.Current.Web.Site.OpenWeb(). Lists ["List"]; и SPContext.Current.Web.Lists ["Список"]?

SPContext.Current.Web.Site.OpenWeb().Lists["List"]; 

Я использовал, чтобы сделать это:

SPContext.Current.Web.Lists["List"]; 

В чем разница между этими двумя и Что более эффективным образом?

+0

Отправьте этот вопрос на http://sharepoint.stackexchange.com/ –

ответ

4

Второй способ намного эффективнее.

В первом методе вы создаете новый объект SPWeb через вызов OpenWeb(), который является дорогостоящим вызовом. Обратите внимание, что вы также должны явно удалять этот объект вручную, когда вы закончите с этим.

Читайте здесь: http://msdn.microsoft.com/en-us/library/aa973248(v=office.12).aspx

1

Согласен с Мадхур

Используйте 2ст подход, поскольку он не будет делать какие-либо утечки памяти

Кстати: В SP2010 есть новый метод, чтобы получить SPList

SPContext.Current.Web.Lists.TryGetList ("ListName");

использование, которое

1

Еще один момент, в-вместо исполнения является то, что оператор SPContext.Current.Web.Site.OpenWeb().Lists["List"] будет получить доступ к списку List из текущего сайта коллекции в то время как линия SPContext.Current.Web.Lists["List"]; будет получить доступ к списку из текущего веб, но а не из текущей коллекции сайтов.


Рассмотрим такой сценарий ...

Рассмотрим есть список Employee существует в семействе сайтов http://[web-app]/sites/sa.

И есть сайт-подсайт на нашем сайте.

Тогда, если вы используете эту строку SPContext.Current.Web.Lists["List"];, тогда она попытается найти список в сети внутри sa/en-us, который, в свою очередь, выдает ошибку.

Пользуясь оператором SPContext.Current.Web.Site.OpenWeb().Lists["List"];, вы найдете список в коллекции сайта sa и успешно запустите.

0

Madhur прав насчет дорогого кода. Сначала я подумал, что он ошибался в том, чтобы прямо распоряжаться им, но он тоже прав. Согласно документации Best Practices:

Объекты SPContext управляются инфраструктурой SharePoint и не должны быть явно удалены в вашем коде. Это справедливо и для объектов SPSite и SPWeb, возвращаемых SPContext.Site, SPContext.Current.Site, SPContext.Web и SPContext.Current.Web.

Однако вы используете метод OpenWeb() для объекта SPContext, который возвращает новый объект SPWeb, если вы посмотрите на декомпилированную сборку. Следовательно, он должен быть удален явно.

 Смежные вопросы

  • Нет связанных вопросов^_^