Ich habe von einem Kollegen erfahren, dass wenn meine Abfragen zum WMI-System-Informationsbeschaffung nur vorwärts und/oder schreibgeschützt sind, sie schneller sind. Das macht Sinn. Aber wie mache ich das?Wie forward-only, schreibgeschützte WMI-Abfragen in C#?
Antwort
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.
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);
- 1. C# forwardonly string.replace
- 2. Schreibgeschützte Textbox in C#
- 3. Wie programmgesteuert schreibgeschützte Netzwerkfreigabe erstellen?
- 4. Wie organisiere ich projektspezifische schreibgeschützte Dateien in C#
- 5. schreibgeschützte Eigenschaften in PHP?
- 6. Objective-C - Schreibgeschützte Variable ist nicht zuweisbar?
- 7. Schreibgeschützte Combobox?
- 8. schreibgeschützte Eigenschaft
- 9. webapp2 - schreibgeschützte Dateisystemfehler
- 10. Schreibgeschützte Regex in Perl überschreiben
- 11. Sichere schreibgeschützte sqlite3-Datenbank
- 12. CouchDB-weite schreibgeschützte Zugriffsrechte
- 13. Teilweise schreibgeschützte Textbox
- 14. Klassenentwurf für schreibgeschützte Auflistungseigenschaften
- 15. Wie werden optional schreibgeschützte Felder in Django-Formularen erstellt?
- 16. Wie lösche ich eine schreibgeschützte Datei?
- 17. Wie erstellen Sie eine schreibgeschützte Abhängigkeitseigenschaft?
- 18. SqlAlchemy-Optimierungen für schreibgeschützte Objektmodelle
- 19. C# schreibgeschützte berechnete Eigenschaften, sollten sie Methoden sein?
- 20. Wie schreibt Vim eine schreibgeschützte Datei?
- 21. Head First C#: seltsame Möglichkeit, eine schreibgeschützte Eigenschaft zu erstellen
- 22. Schreibgeschützte Eigenschaften auf Klassenebene in Python
- 23. Bearbeiten Sie eine schreibgeschützte Ansicht
- 24. Wie ändere ich das schreibgeschützte Dateiattribut für jede Datei in einem Ordner mit C#?
- 25. Wie kann die schreibgeschützte Eigenschaft von Objective-C in Swift überschrieben werden?
- 26. Ersetze schreibgeschützte Eigenschaft in teilweise verspottetem Objekt
- 27. Schreibgeschützte MySQL-Datenbankverbindung in Django erstellen
- 28. Wie erstellt man eine schreibgeschützte Klasseneigenschaft in Python?
- 29. Wie eine schreibgeschützte Eigenschaft in einer REST Api
- 30. Wie erstellt man eine schreibgeschützte Sitzung in nHiberate?