50.000個のアイテムを含むSharePointリストがあり、SP2010のデフォルトのスロットリングを無効にせずにそこからデータをフェッチしたいと考えています。
大きなリストの処理に関するMSDNの記事から、重要な要素はSPQueryで小さなRowLimitを使用し、バッチ処理にListItemCollectionPositionを使用することであると考えました。
ただし、このようなコード(何か)では、スロットル例外が引き続きトリガーされます。
SPQuery query = new SPQuery();
query.Query = "<Where><Contains><FieldRef Name=\"MatterName\" /><Value Type=\"Text\">7476922</Value></Contains></Where>";
query.ViewFields = "<FieldRef Name=\"MatterName\"/>";
query.RowLimit = 10;
int index = 0;
do
{
SPListItemCollection batch = mattersList.GetItems( query );
query.ListItemCollectionPosition = batch.ListItemCollectionPosition;
}
while ( query.ListItemCollectionPosition != null );
SharePoint Connections 2010のMVPエキスパートによると、これは仕様によるものです。結果セットの暗黙的な並べ替えによって、5000アイテムのスロットルしきい値がトリガーされるためです。
これは素晴らしいことですが、このリストからどのように取得するのでしょうか。ContentIteratorを使用する方が良いオプションでしょうか?もしそうなら、これを実現するためにコンテンツイテレータが実行する魔法は何ですか?