Я просто хочу получить список элементов из списка 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 секунд, все еще слишком долго!
Есть идеи? Пожалуйста, помогите оптимизировать :)
Спасибо.