Performance SharePoint库查询运行非常慢

Performance SharePoint库查询运行非常慢,performance,linq,sharepoint,Performance,Linq,Sharepoint,我们在一个可能包含500个文档的库上运行SharePoint查询,以提取标记为活动的已发布文档的最高版本(活动列中的have active=true) 这需要花费太长的时间来运行(大约3-5秒),这让用户感到沮丧 可以对下面的查询做些什么来加速它(我希望这几乎是即时的!) 使用(var site=new SPSite(Helpers.ConfigurationFile.SharePointUrl().ToString()) { 使用(var web=site.RootWeb) { 返回 web.

我们在一个可能包含500个文档的库上运行SharePoint查询,以提取标记为活动的已发布文档的最高版本(活动列中的have active=true)

这需要花费太长的时间来运行(大约3-5秒),这让用户感到沮丧

可以对下面的查询做些什么来加速它(我希望这几乎是即时的!)

使用(var site=new SPSite(Helpers.ConfigurationFile.SharePointUrl().ToString())
{
使用(var web=site.RootWeb)
{
返回
web.Folders[“Templates”].Files.OfType()文件
.Where(file=>file.Item.HasPublishedVersion)
.Where(file=>file.Item.Properties[“Active”].ToString()==“true”)
.Where(file=>file.Item.Versions.OfType()
.Any(x=>x.Level==SPFileLevel.Published))
.Select(文件=>新建库项目(
file.Item.UniqueId,
file.Item.ID,
file.Item.Title,
Helpers.ConfigurationFile.SharePointUrl()
.ToString().AddPathSegment(file.Url),
是的,
Parse(file.MajorVersion.ToString()文件)
+“+file.MinorVersion.ToString())
)
)
.ToList();
}
}
有几点:

  • HasPublishedVersion和file.Item.Versions检查是否执行相同的操作—检查SPFile的已发布版本是否存在
  • SPListItemVersions上的Any查询将按从版本[0]到版本[count-1]的顺序搜索它们,这将转换为“从最新到最旧”(因为版本[0]是SP中的最新版本)。如果您认为您的文档很可能在创建后不久就比最近更频繁地发布,那么通过在集合中循环(从最旧版本到最新版本)来执行相同的检查可能会更快
  • 您可以在活动列上建立索引
  • 您可以通过使用CAML执行部分查询来优化它(我知道这很可怕)。我将尝试将SPFile获取和活动检查委托给CAML查询,然后使用对象模型完成其余部分。看
  • 如果确实使用CAML,PortalItemApprovider.GetCachedListItemsByQuery()可能会更快

关闭查询部分后,引用文件版本的行会减慢查询速度(LINQ会变成每个已发布文档的单独查询)。我认为我无法访问CAML中的文件版本,因此我认为最好的办法是重写代码,仅检索已发布的文档,然后在用户选择文档后获取特定的版本信息。谢谢回复!
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();
    }
}