次の方法で共有


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

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

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

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

手記

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