Запрашивать список из 4000 строк в SharePoint очень медленно - PullRequest
0 голосов
/ 06 марта 2019

Я просто хочу получить список элементов из списка SiteUserInfoList. Этот список содержит около 4000 строк.

var watch = System.Diagnostics.Stopwatch.StartNew();

var qry = new SPQuery { Query = "<Where><Eq><FieldRef Name='ContentType'/><Value Type='Text'>MyValue</Value></Eq></Where>" };
var list = new List<Entity>();
using (var web = spSite.OpenWeb())
{
    var groups = web.SiteUserInfoList.GetItems(qry);
    foreach (SPListItem group in groups)
    {
       list.Add(new Entity
       {
          Id = group.ID,
          Guid = group.UniqueId,
          Title = group.Title
       });
    }
}

watch.Stop();
Console.Write(watch.ElapsedMilliseconds);

ElapsedMilliseconds получает в среднем 20 секунд! Как это может быть так долго ?! (Сервер Xeon W-2145, который используется несколькими виртуальными машинами, но все же - загрузка ЦП не превышает 20%)

Я тоже пробовал:

  • извлечение всего списка и его фильтрация в коде. Это немного быстрее (15 секунд)

  • ContentType Индексированное свойство имеет значение false (вычисленное значение основано на ContentTypeId), но ContentTypeId равно true. (Итак, я предполагаю, что ContentType проиндексирован каким-либо образом?)

  • извлечение результатов с помощью RowLimit. Получил лучшие результаты с RowLimit = 5000 (?!). (пробовал 100, 1000, 2000, ... 8000): 6 секунд, все еще слишком долго!

Есть идеи? Пожалуйста, помогите оптимизировать :) Спасибо.

1 Ответ

1 голос
/ 10 марта 2019

Хорошо. Я обнаружил, что для свойства ContentTypesEnabled установлено значение false. Не знаю, что скрывается за этим свойством, так как оно плохо документировано. И я не могу установить его обратно в ложь ...

Когда я установил его в значение true, я теперь на 2 с !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...