열거형 성능 개선
열거형은 상당한 양의 시스템 리소스를 사용하는 경향이 있습니다. 따라서 대규모 그룹에서 열거형을 수행하려는 경우 WMI 열거형 프로세스를 최적화해야 합니다. 스크립트는 쿼리를 사용하여 큰 집합이 있는 "For each....Next" 작업에서 성능 저하를 방지할 수도 있습니다. 자세한 내용은 WMI 쿼리를 참조하세요.
다음 절차에서는 열거형 성능을 개선하는 방법을 설명합니다.
열거형 성능 향상
lFlags 매개 변수를 설정하여 전달될 때 WMI에서 각 항목을 삭제하는 열거자를 사용하여 데이터의 반동기적 반환을 허용합니다. 자세한 내용은 메서드 호출을 참조하세요.
다음 C++ 코드 예제에서는 WBEM_FLAG_RETURN_IMMEDIATE 및 WBEM_FLAG_FORWARD_ONLY 플래그를 사용하는 방법을 보여줍니다.
WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLY
VBScript 또는 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++ 또는 SWbemServices.InstancesOf에서 CreateInstanceEnum을 사용하지 말고 ExecQuery를 사용합니다.
ExecQuery 메서드는 데이터베이스 기술을 사용해 WMI를 쿼리하고 CreateInstanceEnum 또는 SWbemServices.InstancesOf는 WMI 개체를 열거합니다. 특히 ExecQuery는 열거형 메서드에서 수행할 수 없는 데이터의 특정 하위 집합을 요청할 수 있습니다.
일부 공급자에는 쿼리 기능이 없으므로 WMI는 WMI가 쿼리의 사양을 충족하지 않는 인스턴스를 삭제할 수 있는 "사후 필터" 기능을 제공합니다. 특정 공급자가 이 기능을 활용하는지 여부는 공급자 작성자에게 달려 있습니다.
다양한 쿼리를 실험하여 최상의 성능을 제공하는 항목을 결정합니다.
예를 들어 WMI는 Prop1 < "x" 형식의 WHERE 절을 사용하여 쿼리를 효율적으로 처리하는 경우가 거의 없습니다. 반면 WMI는 일반적으로 KeyProp1 = "x" 형식의 쿼리를 효율적으로 처리합니다.
자세한 내용은 WMI 열거를 참조하세요.