다음을 통해 공유


이벤트 공급자 최적화

이벤트 공급자는 이벤트를 만드는 데 많은 시간을 할애할 수 있습니다. 생성된 이벤트를 사용하는 클라이언트 애플리케이션이 없으면 공급자가 시스템 리소스를 낭비하고 있는 것입니다. 또한 WMI는 복잡한 쿼리를 구문 분석하고 적절한 공급자에게 보내는 데 상당한 양의 리소스를 소비합니다. 시스템 리소스의 낭비를 방지하고 이벤트 공급자의 성능을 향상시키려면 IWbemEventProviderQuerySink 인터페이스를 구현하면 됩니다. IWbemEventProviderQuerySinkNewQueryCancelQuery 메서드를 사용하여 클라이언트 애플리케이션이 WMI에 등록하는 쿼리를 모니터링합니다. 등록된 클라이언트 쿼리를 모니터링하여 공급자는 WMI로 메시지를 보내야 하는지 여부를 결정할 수 있습니다.

WMI는 클라이언트 소비자가 해당 이벤트 공급자가 지원하는 이벤트에 대한 참조를 포함하는 이벤트 필터 쿼리를 등록할 때 이벤트 공급자에서 NewQuery를 호출합니다. 따라서 EmailClass 클래스에 대한 인스턴스 수정 이벤트를 담당하는 이벤트 공급자는 보낸 사람에게만 알림을 생성하도록 설정할 수 있습니다. 공급자가 주체 속성 변경에 대한 알림을 요청하는 쿼리를 받으면 공급자가 해당 알림 생성을 시작할 수 있습니다. 이 시나리오에서는 WMI가 받는 사람 변경 내용만 보고하는 알림을 삭제할 필요가 없습니다.

마찬가지로 WMI는 클라이언트 소비자가 해당 이벤트 공급자가 지원하는 이벤트에 대한 참조를 포함하는 이벤트 필터 쿼리를 등록할 때 이벤트 공급자에서 CancelQuery를 호출합니다. CancelQuery의 목적은 이벤트 공급자가 전송해야 하는 이벤트의 목록을 업데이트하는 것입니다.

참고

공급자가 IWbemEventProviderIWbemEventProviderQuerySink를 모두 지원하는 경우 IUnknown::QueryInterface 메서드의 구현이 두 인터페이스로 포인터를 반환하는지 확인합니다.