Стандарты кодирования Sharepoint - PullRequest
3 голосов
/ 25 августа 2011

Я только что натолкнулся на эту таблицу :

Alternatives to SPList.Items

Пожалуйста, дайте мне знать, какая разница в бедных -> лучше для последних 5 предметов.

Ответы [ 2 ]

7 голосов
/ 25 августа 2011

Причина всего этого довольно проста.Когда вы пишете SPList.Items.Count, чтобы получить общее количество элементов, SPList.Items возвращает коллекцию всех элементов в списке .
Вам не нужны все элементы, это может быть дорогоaction.
При написании SPList.ItemCount вы убедитесь, что прочитали только число из базы данных, а не все элементы.

По сути, это верно для всех элементов в списке - обычно следует избегать использования целых объектов Коллекции (т. Е. SPList.Items или SPFolder.Files), когда это возможно.Точно так же, если вы используете их более одного раза, вы должны кэшировать их, используя локальную переменную.

Вот пример использования индексаторов.Предположим, у меня есть Guid, и я хочу получить предмет.

SPListItem item = list.Items[guid];

Выглядит достаточно невинно, но на самом деле он такой же, как:

SPListItemCollection items = list.Items;
SPListItem item = items[guid];

Дело в том, что - SharePoint (иC #, действительно) не знает, что вы собираетесь делать дальше, или как вы собираетесь использовать коллекцию.В тот момент, когда вы написали .Items, вы уже сделали медленную операцию.

1 голос
/ 15 сентября 2011

причина всего этого довольно проста.Когда вы пишете SPList.Items.Count, чтобы получить общее количество элементов, SPList.Items возвращает коллекцию всех элементов в списке.Вы не хотите все предметы, это может быть дорогостоящим действием.Написав SPList.ItemCount, вы убедитесь, что вы читаете только число из базы данных, а не все элементы.

По сути, это верно для всех элементов в списке - как правило, следует избегать использования всех объектов Collection(т.е. SPList.Items или SPFolder.Files), когда вы можете.Точно так же, если вы используете их более одного раза, вы должны кэшировать их, используя локальную переменную.

Вот пример использования индексаторов.Предположим, у меня есть Guid, и я хочу получить элемент.

SPListItem item = list.Items [guid];

Выглядит достаточно невинно, но на самом деле это то же самое, что и:

SPListItemCollection items = list.Items;SPListItem item = items [guid];

Дело в том, что SharePoint (и C #, действительно) не знает, что вы собираетесь делать дальше или как вы собираетесь использовать коллекцию.В тот момент, когда вы написали. Детали вы уже сделали медленную операцию.

...