2009-06-11 62 views

回答

5

您需要使用EnumerationOptions類並將其Rewindable屬性設置爲false。這裏有一個例子:

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"]); 
      } 
      */ 
     } 
    } 
} 

,你不會看到任何的性能提升,除非你用它來枚舉一類具有大量實例(如Cim_DataFile),你會得到枚舉返回ManagementObjectCollection只有一次。您也將無法使用ManagementObjectCollection.Count等 至於只讀查詢,我不知道如何製作這些。

1

你的同事必須使用半同步法只進普查員一起調用意味着。在半同步模式下,WMI方法調用立即返回,對象在後臺檢索並在創建後按需返回。此外,當使用半同步模式檢索大量實例時,建議您只獲得只向前計數器以提高性能。這些特性在MSDN article中解釋。

由於烏羅什已經指出,要得到半同步模式只進枚舉,您需要與ReturnImmediately屬性設置爲trueRewindable屬性設置爲false,例如使用EnumerationOptions類的實例:

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

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