Оптимизация поставщика событий

Поставщик событий может уделять много времени созданию событий. Если созданные события не используются ни в каких клиентских приложениях, поставщик использует системные ресурсы. Кроме того, WMI тратит значительное количество ресурсов на анализ и отправку сложных запросов соответствующему поставщику. Чтобы избежать потери системных ресурсов и повысить производительность поставщика событий, можно реализовать интерфейс IWbemEventProviderQuerySink . IWbemEventProviderQuerySink отслеживает запросы, которые клиентские приложения регистрируют с помощью WMI, с помощью методов NewQuery и CancelQuery . Отслеживая зарегистрированные клиентские запросы, поставщик может определить, какие сообщения необходимо отправлять в WMI.

WMI вызывает NewQuery для поставщика событий, когда потребитель клиента регистрирует запрос фильтра событий, содержащий ссылки на события, поддерживаемые этим поставщиком событий. Таким образом, поставщик событий, отвечающий за события изменения экземпляра для класса EmailClass , можно настроить таким образом, чтобы создавать уведомления только для отправителя. Когда поставщик получает запрос, запрашивающий уведомление об изменениях в свойстве subject , поставщик может начать создавать эти уведомления. В этом сценарии WMI не требуется для отмены уведомлений, которые изменяют только получатели отчета.

Аналогичным образом WMI вызывает CancelQuery для поставщика событий, когда потребитель клиента отменяет регистрацию запроса фильтра событий, содержащего ссылки на события, поддерживаемые поставщиком событий. Функция CancelQuery предназначена для того, чтобы поставщик событий обновил список событий, которые должны быть отправлены.

Примечание

Если ваш поставщик поддерживает как IWbemEventProvider, так и IWbemEventProviderQuerySink, убедитесь, что реализация метода IUnknown::QueryInterface возвращает указатели на оба интерфейса.