我只想从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,可被多个VM共享,但仍然-CPU使用率永远不会超过20%)
我也尝试过:
获取整个列表并将其过滤到代码中。快一点(15秒)
ContentType Indexed属性为false(基于ContentTypeId的计算值),但ContentTypeId为true。 (所以我假设ContentType是以某种方式被索引的?)
使用RowLimit获取结果。使用RowLimit = 5000(?!)可获得最佳结果。 (尝试100、1000、2000,... 8000):6秒,仍然太长!
有什么主意吗?请帮助优化:) 谢谢。
答案 0 :(得分:1)
好吧,我发现有ContentTypesEnabled属性设置为false。 真的不知道此属性的背后是什么,因为它没有很好的记录。 而且我无法将其设置为false ...
当我将其设置为true时,我现在不到 2秒!