0

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. バックグラウンド ワーカー: ユーザーごとに 1 つのワーカー スレッド。結果: 効果なし。これを行うと、呼び出しが非常に遅くなるようです。要するに、全体の速度は同じままです。

  2. 個別の EXE プロセス: ユーザーごとに 1 つの EXE。"Worker"-Exe を作成し、ユーザーを引数として呼び出しました: IndexWorker.exe -user1
    結果: 同じ結果です! すべての exe の呼び出しが遅くなります。

  3. 個別の Windows サービス: ユーザーごとに 1 つのサービス。結果: 突然、リクエストが遅くなることはありませんでした。つまり、全体の速度を 1 分あたり 500 アイテムの倍数にすることができました (最大 3 つのプロセスを試しました。つまり、1 分あたり 1500 アイテムです)。悪くはありませんが、質問だけさせてください:

1) と 2) では EWS 呼び出しが遅くなるのに、3) では遅くならないのはなぜですか? スレッド化は私にとって最もエレガントな方法ですが、使用できるオプションまたは設定はありますか?

調整ポリシーと EWSFindCountLimit についていくつか読みました。これは正しい方向ですか?

4

2 に答える 2

0

別のサービスによってパフォーマンスが大幅に向上した理由がわかりましたか? スロットリングはサービス アカウント レベルで適用されるため、どこから呼び出しを行うかは問題ではありません。

于 2012-08-05T01:24:11.173 に答える
0

問題はスロットリング ポリシーです。EWS または RPC アクティビティを制限しないサービス アカウントのスロットリング ポリシーを作成する必要があります。

于 2012-06-14T21:24:28.007 に答える