열거형은 상당한 양의 시스템 리소스를 사용하는 경향이 있습니다. 따라서 큰 그룹에서 열거를 수행하려는 경우 WMI 열거형 프로세스를 최적화해야 합니다. 또한 스크립트는 쿼리를 사용하여 큰 집합이 있는 "For each....Next" 작업에서 성능 저하를 방지할 수 있습니다. 자세한 내용은 쿼리 WMI참조하세요.
다음 절차에서는 열거형 성능을 향상시키는 방법을 설명합니다.
열거 성능을 개선하기 위해
lFlags 매개 변수를 설정하여 WMI에서 각 항목을 전달할 때 삭제하는 열거자를 사용하여 데이터의 반동기식 반환을 허용합니다. 자세한 내용은 메서드호출을 참조하세요.
다음 C++ 코드 예제에서는 WBEM_FLAG_RETURN_IMMEDIATE 및 WBEM_FLAG_FORWARD_ONLY 플래그를 사용하는 방법을 보여줍니다.
WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLYVBScript 또는 Visual Basic에서 WbemFlagEnum의 스크립팅 플래그 WbemFlagReturnImmediately 및 WbemFlagForwardOnly를 사용하십시오. 이러한 플래그의 결합된 값은 10진수 48입니다.
스크립팅 및 매개 변수 플래그로 인해 다음과 같은 동작이 발생합니다.
- WBEM_FLAG_RETURN_IMMEDIATE 또는 wbemFlagReturnImmediately 플래그는 반비동기 동작을 요청합니다. 열거자를 만드는 호출은 즉시 반환됩니다. 그런 다음 받은 개체 집합을 트래버스하기 시작할 수 있습니다.
- WBEM_FLAG_FORWARD_ONLY 플래그 또는 wbemFlagForwardOnly 플래그는 되돌릴 수 없는 열거자를 요청합니다. 즉, WMI는 개체를 본 후 개체를 해제할 수 있습니다.
열거형이 크고 애플리케이션이 매우 빠른 상황에서는 반동기 처리와 함께 정방향 전용 열거자를 사용하면 WMI가 훨씬 적은 개체를 유지할 수 있으므로 응답 시간과 메모리 성능이 크게 향상됩니다.
다음 VBScript 코드 예제에서는 결합된 wbemFlagReturnImmediately 및 wbemFlagForwardOnly 플래그를 사용하여 호출을 수행하여 이벤트 로그에서 이벤트 컬렉션을 가져오는 방법을 보여 줍니다.
Set Events = GetObject("winmgmts:").ExecQuery _ ("SELECT * FROM Win32_NTLogEvent " _ & "WHERE Logfile = 'System'",,48)가능하면 C++ 또는 CreateInstanceEnumSWbemServices.InstancesOf사용하지 말고 대신 ExecQuery사용합니다.
ExecQuery 메서드는 데이터베이스 기술을 사용하여 WMI를 쿼리하는 반면 CreateInstanceEnum 또는 SWbemServices.InstancesOf WMI 개체를 열거합니다. 특히 ExecQuery 열거 메서드에서 수행할 수 없는 데이터의 특정 하위 집합을 요청할 수 있습니다.
일부 공급자에는 쿼리 기능이 없으므로 WMI는 WMI가 쿼리의 사양을 충족하지 않는 인스턴스를 삭제할 수 있는 "사후 필터" 기능을 제공합니다. 특정 공급자가 이 기능을 활용하는지 여부는 공급자 작성자에게 달려 있습니다.
다양한 쿼리를 실험하여 최상의 성능을 제공하는 항목을 결정합니다.
예를 들어 WMI는 Prop1 < "x" 양식의 WHERE 절을 사용하여 쿼리를 효율적으로 처리하는 일이 거의 없습니다. 반면 WMI는 일반적으로 KeyProp1 = "x" 형식의 쿼리를 효율적으로 처리합니다.
자세한 내용은 WMI 열거하기을 참조하십시오.