Оптимизация поставщика событий
Поставщик событий может уделять большое время созданию событий. Если клиентские приложения не используют созданные события, поставщик тратит системные ресурсы впустую. Кроме того, WMI тратит значительное количество ресурсов для синтаксического анализа и отправки сложных запросов соответствующему поставщику. Чтобы избежать потери системных ресурсов и повысить производительность поставщика событий, можно реализовать интерфейс IWbemEventProviderQuerySink. IWbemEventProviderQuerySink отслеживает запросы, регистрируемые клиентскими приложениями с помощью методов NewQuery и CancelQuery. Отслеживая зарегистрированные клиентские запросы, ваш поставщик может определить, нужно ли отправлять какие-либо сообщения в WMI.
WMI вызывает NewQuery в поставщике событий, когда потребитель клиента регистрирует запрос фильтра событий, содержащий ссылки на события, поддерживаемые этим поставщиком событий. Поэтому поставщика событий, ответственного за события изменения экземпляра для класса EmailClass, можно настроить для создания уведомлений только для отправителя . Когда поставщик получает запрос, запрашивающий уведомление об изменениях в свойстве субъекта, поставщик может начать создавать эти уведомления. В этом сценарии WMI не нужно отменять уведомления, которые сообщают о изменениях только для.
Аналогичным образом WMI вызывает вызовы CancelQuery в поставщике событий, когда потребитель клиента отменяет регистрацию запроса фильтра событий, содержащего ссылки на события, поддерживаемые поставщиком событий. Цель CancelQuery состоит в том, чтобы поставщик событий обновил список событий, которые необходимо отправлять.
Заметка
Если поставщик поддерживает IWbemEventProvider и IWbemEventProviderQuerySink, убедитесь, что реализация метода IUnknown::QueryInterface возвращает указатели на оба интерфейса.