2011-01-05 5 views
0

シェアポイントドキュメントライブラリ内のアイテムの数をプログラム的に取得しようとしています。私が扱っている規模は30〜7000件です。カウントを表示するスマートパーツにはユーザーコントロールがあります。私たちは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秒になる。この問題

アワーズのための任意のより良いapprochではなくVoulnterrList.Items.CountのSharePoint 2007の

答えて

3

使用VoulnterrList.ItemCountです。

List.Itemsを使用すると、リスト内のすべてのアイテムがコンテンツデータベースから読み込まれます。カウントを取得するためにアイテムを実際に必要としないので、オーバーヘッドが無駄になります。

これは8行目のパフォーマンスを修正しますが、9行目でもクエリによって返される結果の数に応じて問題が発生する可能性があります。

+0

はい私たちはクエリ結果に600項目ありますが、62000項目はリストにあります – sooraj

+0

@sooraj:それはあなたがまだいることを意味しますか?問題がある? –

+0

いいえ、私はそれを実装する、私は以前のコメントをurに応答していた。 – sooraj

0

あなたはここで2つの最適化を行うことができます。

  • がいるので、あなたのCAMLクエリの<ViewFields>セクションにその列を使用してあなたのリスト

  • の柱の一つにインデックスを作成します。それだけで、インデックス付きの列検索されます。

これは高速化するはずです。 http://sharepoint.microsoft.com/Blogs/GetThePoint/Lists/Posts/Post.aspx?ID=162

+0

私たちはすでにその列のインデックスを作成しました – sooraj

+0

私はもう1つを試してみます – sooraj

+1

私はグレッグの答えにも同意します.... –

関連する問題