Performance SharePoint库查询运行非常慢
我们在一个可能包含500个文档的库上运行SharePoint查询,以提取标记为活动的已发布文档的最高版本(活动列中的have active=true) 这需要花费太长的时间来运行(大约3-5秒),这让用户感到沮丧 可以对下面的查询做些什么来加速它(我希望这几乎是即时的!)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.
使用(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()可能会更快
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();
}
}