SharePoint库查询运行速度很慢

时间:2012-03-09 17:41:05

标签: performance linq sharepoint

我们在可能包含500个文档的库上运行SharePoint查询,以撤回标记为活动的已发布文档的最高版本(在“活动”列中具有active = true)。

运行时间太长(大约3-5秒),这让用户感到沮丧。

可以对下面的查询做些什么来加快速度(我希望这几乎可以立即实现!)

using (var site = new SPSite(Helpers.ConfigurationFile.SharePointUrl().ToString()))
{
    using (var web = site.RootWeb)
    {
        return
            web.Folders["Templates"].Files.OfType<SPFile>()
            .Where(file => file.Item.HasPublishedVersion)
            .Where(file => file.Item.Properties["Active"].ToString() == "true")
            .Where(file => file.Item.Versions.OfType<SPListItemVersion>()
                .Any(x => x.Level == SPFileLevel.Published))
            .Select(file => new LibraryItem(
                                      file.Item.UniqueId,
                                      file.Item.ID, 
                                      file.Item.Title, 
                                      Helpers.ConfigurationFile.SharePointUrl()
                                          .ToString().AddPathSegment(file.Url), 
                                      true, 
                                      float.Parse(file.MajorVersion.ToString() 
                                      + "." + file.MinorVersion.ToString())
                                      )

                    )
            .ToList();
    }
}

1 个答案:

答案 0 :(得分:1)

几点:

  • 不是HasPublishedVersion和file.Item.Versions检查做同样的事情 - 检查是否存在已发布的SPFile版本?
  • SPListItemVersions上的Any查询将按照从版本[0]到版本[count - 1]的顺序搜索它们,这些版本转换为“从最新到最旧”(因为Versions [0]是SP中的最新版本)。如果您认为您的文档很可能在创建后很快发布,而不是最近一次,那么通过在集合中向后循环(从最旧版本到最新版本)执行相同检查可能会更快。“ LI>
  • 您可以在“活动”列上建立索引。
  • 你可以通过使用CAML执行部分查询来优化它(我知道这太糟糕了)。我会尝试将SPFile获取和主动检查委托给CAML查询,然后使用对象模型完成其余部分。请参阅this link
  • 如果你确实使用CAML,PortalSiteMapProvider.GetCachedListItemsByQuery()可能会被证明是更快的SPList.GetItems()。