Exchange サーバー (EWS API 経由の 2010) から情報を取得したいと考えています。詳細には、Windows サービスを構築して、すべての交換ユーザーを反復処理し、非個人化を使用してプライベート メールボックスにインデックスを付けたいと考えています。これはうまく機能しますが、これをユーザーごとに実行すると非常に遅くなります (メールボックスのボリュームとユーザーの量によって異なります)。インデックス作成速度は現在、1 分あたり約 500 アイテムです。
私のテスト システムでは、次の呼び出しに約 250 ミリ秒かかります。
PropertySet myPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, ItemSchema.ParentFolderId);
myPropertySet.RequestedBodyType = BodyType.Text;
myPropertySet.Add(entryIdExtendedProperty);
Item item = Item.Bind(es, itemKey, myPropertySet);
だから私の考えは、並列化を行うことでした。これまでのところ、3つの方法を試しました:
バックグラウンド ワーカー: ユーザーごとに 1 つのワーカー スレッド。結果: 効果なし。これを行うと、呼び出しが非常に遅くなるようです。要するに、全体の速度は同じままです。
個別の EXE プロセス: ユーザーごとに 1 つの EXE。"Worker"-Exe を作成し、ユーザーを引数として呼び出しました: IndexWorker.exe -user1
結果: 同じ結果です! すべての exe の呼び出しが遅くなります。個別の Windows サービス: ユーザーごとに 1 つのサービス。結果: 突然、リクエストが遅くなることはありませんでした。つまり、全体の速度を 1 分あたり 500 アイテムの倍数にすることができました (最大 3 つのプロセスを試しました。つまり、1 分あたり 1500 アイテムです)。悪くはありませんが、質問だけさせてください:
1) と 2) では EWS 呼び出しが遅くなるのに、3) では遅くならないのはなぜですか? スレッド化は私にとって最もエレガントな方法ですが、使用できるオプションまたは設定はありますか?
調整ポリシーと EWSFindCountLimit についていくつか読みました。これは正しい方向ですか?