我正在尝试以编程方式获取sharepoint文档库中项目的计数。我正在使用的规模是30-70000项。我们在smartpart中有usercontrol来显示计数。我们是一个TEAM网站。
这是获取总计数的代码:
SPList VoulnterrList = web.Lists[ListTitle];
SPQuery query = new SPQuery();
query.ViewAttributes = "Scope=\"Recursive\"";
string queries = "<Where><Eq><FieldRef Name='ApprovalStatus' /><Value Type='Choice'>Pending</Value></Eq></Where>";
query.Query = queries;
SPListItemCollection lstitemcollAssoID = VoulnterrList.GetItems(query);
lblCount.Text = "Total Proofs: " + VoulnterrList.Items.Count.ToString() + " Pending Proofs: " + lstitemcollAssoID.Count.ToString();
问题是这有严重的性能问题,加载页面需要75到80秒。如果我们评论此页面加载将下降到4秒。这个问题的任何更好的方法
我们的是sharepoint 2007
答案 0 :(得分:3)
使用VoulnterrList.ItemCount
代替VoulnterrList.Items.Count
。
使用List.Items时,列表中的所有项目都从内容数据库加载。由于我们实际上并不需要这些项目来计算,因此浪费了开销。
这将修复第8行的效果,但根据查询返回的结果数量,您可能仍会遇到第9行的问题。
答案 1 :(得分:0)
您可以在此处进行两项优化:
在列表的某列上创建索引
在CAML查询的<ViewFields>
部分中使用该列,以便仅检索该索引列。
这应该加快。请参阅有关如何在列上创建索引的文章: http://sharepoint.microsoft.com/Blogs/GetThePoint/Lists/Posts/Post.aspx?ID=162