以最快的方式获取大型共享点列表的项目计数

时间:2011-01-05 06:38:10

标签: sharepoint-2007

我正在尝试以编程方式获取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

2 个答案:

答案 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