Optimieren eines Ereignisanbieters
Ein Ereignisanbieter kann viel Zeit für das Erstellen von Ereignissen aufwenden. Wenn keine Clientanwendungen die erstellten Ereignisse verwenden, verschwenden die Anbieter Systemressourcen. Darüber hinaus gibt WMI eine beträchtliche Menge an Ressourcen aus, die komplexe Abfragen analysieren und an den entsprechenden Anbieter senden. Um die Verschwendung von Systemressourcen zu vermeiden und die Leistung Ihres Ereignisanbieters zu verbessern, können Sie die IWbemEventProviderQuerySink-Schnittstelle implementieren. IWbemEventProviderQuerySink überwacht die Abfragen, die Clientanwendungen mithilfe der Methoden NewQuery und CancelQuery bei WMI registrieren. Durch die Überwachung der registrierten Clientabfragen kann Ihr Anbieter bestimmen, was geschieht, wenn Nachrichten an WMI gesendet werden müssen.
WMI ruft NewQuery für einen Ereignisanbieter auf, wenn ein Clientverbraucher eine Ereignisfilterabfrage registriert, die Verweise auf Ereignisse enthält, die von diesem Ereignisanbieter unterstützt werden. Daher kann der Ereignisanbieter, der für Instanzänderungsereignisse für die EmailClass-Klasse verantwortlich ist, so eingerichtet werden, dass Benachrichtigungen nur für den Absender generiert werden. Wenn der Anbieter eine Abfrage empfängt, die eine Benachrichtigung über Änderungen an der Subject-Eigenschaft anfordert, kann der Anbieter mit dem Generieren dieser Benachrichtigungen beginnen. In diesem Szenario ist WMI nicht erforderlich, um die Benachrichtigungen zu verwerfen, die nur Empfängeränderungen melden.
Auf ähnliche Weise ruft WMI CancelQuery für einen Ereignisanbieter auf, wenn ein Clientverbraucher die Registrierung einer Ereignisfilterabfrage aufhebt, die Verweise auf ereignisse enthält, die vom Ereignisanbieter unterstützt werden. Der Zweck von CancelQuery besteht darin, dass der Ereignisanbieter die Liste der zu sendenden Ereignisse aktualisiert.
Hinweis
Wenn Ihr Anbieter sowohl IWbemEventProvider als auch IWbemEventProviderQuerySinkunterstützt, stellen Sie sicher, dass Ihre Implementierung der IUnknown::QueryInterface-Methode Zeiger auf beide Schnittstellen zurückgibt.