열거형 성능 개선

열거형은 상당한 양의 시스템 리소스를 사용하는 경향이 있습니다. 따라서 대규모 그룹에서 열거형을 수행하려는 경우 WMI 열거형 프로세스를 최적화해야 합니다. 스크립트는 쿼리를 사용하여 큰 집합이 있는 "For each....Next" 작업에서 성능 저하를 방지할 수도 있습니다. 자세한 내용은 WMI 쿼리를 참조하세요.

다음 절차에서는 열거형 성능을 개선하는 방법을 설명합니다.

열거형 성능 향상

  1. lFlags 매개 변수를 설정하여 전달될 때 WMI에서 각 항목을 삭제하는 열거자를 사용하여 데이터의 반동기적 반환을 허용합니다. 자세한 내용은 메서드 호출을 참조하세요.

    다음 C++ 코드 예제에서는 WBEM_FLAG_RETURN_IMMEDIATEWBEM_FLAG_FORWARD_ONLY 플래그를 사용하는 방법을 보여줍니다.

    WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLY

    VBScript 또는 Visual Basic에서 WbemFlagEnumWbemFlagReturnImmediatelyWbemFlagForwardOnly 스크립팅 플래그를 사용합니다. 이 플래그의 합계는 10진수 48입니다.

    스크립팅 및 매개 변수 플래그로 인해 다음과 같은 동작이 발생합니다.

    • WBEM_FLAG_RETURN_IMMEDIATE 또는 wbemFlagReturnImmediately 플래그는 반동기적 동작을 요청합니다. 열거자를 만드는 호출은 즉시 반환됩니다. 그런 다음, 받은 개체 집합을 트래버스하기 시작할 수 있습니다.
    • WBEM_FLAG_FORWARD_ONLY 플래그 또는 wbemFlagForwardOnly 플래그는 되감기할 수 없는 열거자를 요청합니다. 즉 WMI는 개체를 본 후 개체를 해제할 수 있습니다.

    열거형이 크고 응용 프로그램이 매우 빠른 상황에서는 반동기적 처리와 함께 정방향 전용 열거자를 사용하면 WMI가 훨씬 적은 개체를 유지할 수 있으므로 응답 시간과 메모리 성능이 크게 향상됩니다.

    다음 VBScript 코드 예제에서는 결합된 wbemFlagReturnImmediatelywbemFlagForwardOnly 플래그로 호출하여 이벤트 로그에서 이벤트 컬렉션을 가져오는 방법을 보여 줍니다.

    Set Events = GetObject("winmgmts:").ExecQuery _
         ("SELECT * FROM Win32_NTLogEvent " _
          & "WHERE Logfile = 'System'",,48)
    
  2. 가능하면 C++ 또는 SWbemServices.InstancesOf에서 CreateInstanceEnum을 사용하지 말고 ExecQuery를 사용합니다.

    ExecQuery 메서드는 데이터베이스 기술을 사용해 WMI를 쿼리하고 CreateInstanceEnum 또는 SWbemServices.InstancesOf는 WMI 개체를 열거합니다. 특히 ExecQuery는 열거형 메서드에서 수행할 수 없는 데이터의 특정 하위 집합을 요청할 수 있습니다.

    일부 공급자에는 쿼리 기능이 없으므로 WMI는 WMI가 쿼리의 사양을 충족하지 않는 인스턴스를 삭제할 수 있는 "사후 필터" 기능을 제공합니다. 특정 공급자가 이 기능을 활용하는지 여부는 공급자 작성자에게 달려 있습니다.

  3. 다양한 쿼리를 실험하여 최상의 성능을 제공하는 항목을 결정합니다.

    예를 들어 WMI는 Prop1 < "x" 형식의 WHERE 절을 사용하여 쿼리를 효율적으로 처리하는 경우가 거의 없습니다. 반면 WMI는 일반적으로 KeyProp1 = "x" 형식의 쿼리를 효율적으로 처리합니다.

자세한 내용은 WMI 열거를 참조하세요.