在SharePoint中查询4000行列表很慢

问题描述 投票:0回答:1

我只想从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,它为多个虚拟机共享但仍然 - CPU使用率从未超过20%)

我也尝试过:

  • 获取整个列表并在代码中过滤它。它快一点(15秒)
  • ContentType Indexed属性为false(基于ContentTypeId的计算值),但ContentTypeId为true。 (所以我假设ContentType以某种方式编入索引?)
  • 使用RowLimit获取结果。 RowLimit = 5000(?!)获得最佳效果。 (试过100,1000,2000,...... 8000):6秒,还是太长了!

任何的想法?请帮忙优化:)谢谢。

sharepoint sharepoint-2010
1个回答
1
投票

好的我发现有ContentTypesEnabled属性被设置为false。不知道这个属性的背后是什么,因为它没有很好的记录。我不能把它归还为假......

当我把它设置为真时,我现在不到2秒!

© www.soinside.com 2019 - 2024. All rights reserved.