当面の問題
このC# Windows アプリケーションは、EWS マネージ API 2.0を使用して、ユーザーの予定表に予定を作成します。各予定には、一意の値を持つ拡張プロパティがあります。後で と を使用して予定を検索しFindItems
ますItemView
。
ユーザーは、この検索を初めて実行するときにかなりの遅延を経験します。その後の応答時間は完全に許容されます。
(「初回」は少しあいまいです。ユーザーはその日の後半に再び遅延を経験する可能性があるためです)
// locate ID of appointment where extended property value equals 1234:
var filter = new Ews.SearchFilter.IsEqualTo(extendedPropertyDefinition, 1234);
var view = new ItemView(1, 0);
view.PropertySet = BasePropertySet.IdOnly;
var folder = new FolderId(WellKnownFolderName.Calendar, new Mailbox("..."));
var result = service.FindItems(folder, filter, view);
リモート サーバーはExchange Server 2007 SP1です。
リサーチ
MSDN はいくつかのコメントを検索フォルダーと制限されたビューに関連付けていますが、これらが私たちの状況に当てはまるかどうかはわかりません.
フォルダにビューを適用すると、ストアに検索フォルダが作成されます。検索フォルダーが作成されると、後で使用するためにキャッシュされます。ユーザーが既に存在する検索フォルダーを作成しようとすると、キャッシュされた検索フォルダーが使用されます。これにより、将来の表示がかなり迅速になります。既定では、Exchange はすべての検索フォルダーを無期限にキャッシュするわけではありません。
具体的には EWS に関して:
また、Exchange ストアの検索クエリが初めて発行されると、実行が非常に遅くなり、タイムアウトになる可能性がありますが、それ以降の実行では問題なく応答するという事実に注意することも重要です。これは、ストア検索の実行時に Exchange サーバーで発生するバックエンド プロセスが原因です。
彼らは、不変で動的でないクエリ用の検索フォルダを作成することを提案していますが、クエリは予定ごとに異なるため、このケースには適していないようです。
アプリケーションで、不変のパラメーターの固定セットを持つ特定のクエリが必要な場合は、検索フォルダーを使用できます。[...] 検索フォルダーは、不変で非動的なクエリにのみ役立ちます。
本質的に必要なのは、データベースの用語で言えば、プロパティに「インデックス」を作成し、時間や頻度に関係なく、この特定のプロパティのすべての検索が高速であることを確認することです。
このプロパティを「インデックス化」することは可能ですか? この初期遅延を取り除くために、クライアント側またはサーバー側のいずれかで何かを構成できますか?