在SharePoint中查询4000行列表很慢

时间:2019-03-06 13:44:16

标签: sharepoint sharepoint-2010

我只想从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秒,仍然太长!

有什么主意吗?请帮助优化:) 谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,我发现有ContentTypesEnabled属性设置为false。 真的不知道此属性的背后是什么,因为它没有很好的记录。 而且我无法将其设置为false ...

当我将其设置为true时,我现在不到 2秒