イベント プロバイダーの最適化

イベント プロバイダーでは、イベントの作成に多くの時間を費やす場合があります。 作成されたイベントを使用するクライアント アプリケーションがない場合、プロバイダーではシステム リソースを無駄にしています。 さらに、WMI では、複雑なクエリを解析して適切なプロバイダーに送信するのにかなりの量のリソースを費やします。 システム リソースの無駄を回避し、イベント プロバイダーのパフォーマンスを向上させるために、IWbemEventProviderQuerySink インターフェイスを実装できます。 IWbemEventProviderQuerySink では、NewQuery および CancelQuery メソッドを使用して、クライアント アプリケーションによって WMI に登録されるクエリを監視します。 登録されているクライアント クエリを監視することで、プロバイダーでは、WMI にメッセージを送信する必要がある場合はどうなるかを判断できます。

イベント プロバイダーでサポートされているイベントへの参照を含むイベント フィルター クエリがクライアント コンシューマーによって登録されると、WMI ではそのイベント プロバイダーで NewQuery を呼び出します。 そのため、EmailClass クラスのインスタンス変更イベントを担当するイベント プロバイダーは、送信者に対してのみ通知を生成するように設定できます。 subject プロパティへの変更の通知を要求するクエリをプロバイダーで受信すると、プロバイダーではそれらの通知の生成を開始できます。 このシナリオでは、WMI で受信者の変更のみを報告する通知を破棄する必要はありません。

同様に、イベント プロバイダーでサポートされているイベントへの参照を含むイベント フィルター クエリがクライアント コンシューマーによって登録解除されると、WMI ではそのイベント プロバイダーで CancelQuery を呼び出します。 CancelQuery の目的は、送信する必要があるイベントの一覧をイベント プロバイダーで更新することです。

注意

プロバイダーで IWbemEventProviderIWbemEventProviderQuerySink の両方がサポートされる場合は、IUnknown::QueryInterface メソッドの実装で両方のインターフェイスへのポインターを返すようにします。