2009-06-11 7 views

Antwort

5

Sie müssen die EnumerationOptions-Klasse verwenden und die Rewindable-Eigenschaft auf false festlegen. Hier ein Beispiel:

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

Sie werden keine Leistungsverbesserung sehen, wenn Sie es verwenden, um eine Klasse mit einer großen Anzahl von Instanzen aufzuzählen (wie CIM_DataFile) und Sie werden die zurückManagementObject nur einmal aufzuzählen bekommen. Sie werden auch nicht in der Lage sein, ManagementObjectCollection.Count usw. zu verwenden. Wie bei schreibgeschützten Abfragen bin ich nicht sicher, wie Sie diese erstellen.

1

Ihr Mitarbeiter muss die Verwendung der semi-synchronen Methodenaufrufe zusammen mit Forward-Only-Enumeratoren gemeint haben. Im semisynchronen Modus werden WMI-Methodenaufrufe sofort zurückgegeben, und Objekte werden im Hintergrund abgerufen und bei Bedarf zurückgegeben, sobald sie erstellt wurden. Wenn der semisynchrone Modus zum Abrufen einer großen Anzahl von Instanzen verwendet wird, empfiehlt es sich außerdem, Nur-Vorwärts-Enumeratoren zu erhalten, um die Leistung zu verbessern. Diese Besonderheiten werden in dieser MSDN article erläutert.

Wie Uros hervorgehoben hat, eine zukunfts nur enumerator in halbsynchroner Modus zu gelangen, müssen Sie die EnumerationOptions Klasseninstanz mit der ReturnImmediately Eigenschaft true und die Rewindable-false gesetzten Eigenschaft verwenden, zB:

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

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