2009-06-11 4 views

답변

5

EnumerationOptions 클래스를 사용하고 해당 Rewindable 속성을 false로 설정해야합니다. 당신은 (때 CIM_Datafile 같은) 인스턴스 많은 수의 클래스를 열거를 사용하고 한 번만 반환 ManagementObjectCollection을 열거 얻을 것이다 않는

using System; 
using System.Management; 

namespace WmiTest 
{ 
    class Program 
    { 
     static void Main() 
     { 
      EnumerationOptions options = new EnumerationOptions(); 
      options.Rewindable = false; 
      options.ReturnImmediately = true; 

      string query = "Select * From Win32_Process"; 

      ManagementObjectSearcher searcher = 
       new ManagementObjectSearcher(@"root\cimv2", query, options); 

      ManagementObjectCollection processes = searcher.Get(); 

      foreach (ManagementObject process in processes) 
      { 
       Console.WriteLine(process["Name"]); 
      } 

      // Uncomment any of these 
      // and you will get an exception: 

      //Console.WriteLine(processes.Count); 

      /* 
      foreach (ManagementObject process in processes) 
      { 
       Console.WriteLine(process["Name"]); 
      } 
      */ 
     } 
    } 
} 

당신은 어떤 성능 향상을 볼 수 없습니다 예를 들면 다음과 같습니다. 또한 ManagementObjectCollection.Count 등을 사용할 수 없습니다. 읽기 전용 쿼리의 경우 어떻게 작성해야할지 모르겠습니다.

1

동료는 반자동 메서드 호출을 전달 전용 열거 자와 함께 사용해야한다는 의미 여야합니다. 반자동 모드에서는 WMI 메서드 호출이 즉시 반환되고 개체가 백그라운드에서 검색되어 만들어지면 요청시 반환됩니다. 또한 반자동 모드를 사용하여 많은 수의 인스턴스를 검색 할 경우 성능을 향상시키기 위해 전진 전용 열거자를 얻는 것이 좋습니다. 이러한 특징은 MSDN article에 설명되어 있습니다.

EnumerationOptions opt = new EnumerationOptions(); 
opt.ReturnImmediately = true; 
opt.Rewindable = false; 

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, opt); 
:

우로스가 지적했듯이, 일부 동기 모드에서 앞으로 만 열거를 얻을, 당신은 true로 설정 ReturnImmediately 재산 및 false로 설정 Rewindable 특성, 예를 들어으로 EnumerationOptions 클래스 인스턴스를 사용할 필요가

관련 문제