优化事件提供程序

事件提供程序可能会花费大量时间来创建事件。 如果没有客户端应用程序使用已创建的事件,则提供程序正在浪费系统资源。 此外,WMI 会花费大量资源来分析复杂查询并将其发送到相应的提供程序。 为了避免浪费系统资源并提高事件提供程序的性能,你可以实现 IWbemEventProviderQuerySink 接口。 IWbemEventProviderQuerySink 使用 NewQueryCancelQuery 方法监视客户端应用程序向 WMI 注册的查询。 通过监视已注册的客户端查询,提供程序可以确定是否必须将任何消息发送到 WMI。

当客户端使用者注册包含事件提供程序支持的事件引用的事件筛选器查询时,WMI 对事件提供程序调用 NewQuery。 因此,可以将负责 EmailClass 类的实例修改事件的事件提供程序设置为仅为发件人生成通知。 当提供程序收到有关主题属性变更的查询请求通知时,提供程序可以开始生成这些通知。 在这种情况下,不会要求 WMI 丢弃仅报告收件人变更的通知。

类似地,当客户端使用者取消注册包含事件提供程序支持的事件引用的事件筛选器查询时,WMI 对事件提供程序调用 CancelQuery。 CancelQuery 的用途是让事件提供程序更新应发送的事件的列表。

注意

如果提供程序同时支持 IWbemEventProviderIWbemEventProviderQuerySink,请确保 IUnknown::QueryInterface 方法的实现返回指向这两个接口的指针。