Un collaborateur m'a dit que si mes requêtes de collecte d'informations sur le système WMI sont en avant uniquement et/ou en lecture seule, elles seront plus rapides. Ça a du sens. Mais comment puis-je le faire?Comment faire des requêtes WMI en lecture seule, en lecture seule, en C#?
Répondre
Vous devez utiliser la classe EnumerationOptions et définir sa propriété Rewindable sur false. Voici un exemple:
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"]);
}
*/
}
}
}
Vous ne verrez aucune amélioration de la performance à moins que vous l'utiliser pour énumérer une classe avec un grand nombre de cas (comme CIM_DataFile) et vous obtiendrez d'énumérer le ManagementObjectCollection retourné une seule fois. Vous ne pourrez pas non plus utiliser ManagementObjectCollection.Count, etc. En ce qui concerne les requêtes en lecture seule, je ne suis pas sûr de savoir comment les faire.
Votre collègue a dû utiliser les appels de méthodes semi-synchrones avec des enquêteurs uniquement expéditeurs. En mode semi-synchrone, les appels de méthode WMI reviennent immédiatement et les objets sont récupérés en arrière-plan et renvoyés à la demande une fois créés. De même, lorsque vous utilisez le mode semi-synchrone pour extraire un grand nombre d'instances, il est recommandé d'obtenir des énumérateurs uniquement pour l'amélioration des performances. Ces particularités sont expliquées dans cette section MSDN article.
Comme Uros a souligné, pour obtenir un avant uniquement recenseur en mode semi-synchrone, vous devez utiliser l'instance de classe EnumerationOptions
avec la propriété ReturnImmediately
mis à true
et la propriété Rewindable
mis à false
, par exemple:
EnumerationOptions opt = new EnumerationOptions();
opt.ReturnImmediately = true;
opt.Rewindable = false;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, opt);
- 1. PropertyGrid en lecture seule
- 2. propriété en lecture seule
- 3. Delphi ClientDataSet en lecture seule
- 4. « Lecture seule » propriété accesseur en C#
- 5. Comment définir un DateTimePicker en lecture seule?
- 6. Comment faire un contrôle Windows Forms en lecture seule?
- 7. Afficher avec une colonne en lecture seule
- 8. en lecture seule DataGridView et IEditableObject
- 9. Expose la mémoire en lecture seule
- 10. Optimisation Sqlite: scénario en lecture seule
- 11. Rendre l'élément DOM efficace en lecture seule
- 12. Accès en lecture seule aux procédures stockées
- 13. Comment effacer l'indicateur en lecture seule d'un fichier en Perl?
- 14. Fichiers SVN et en lecture seule
- 15. Utilisateur en lecture seule pour svn
- 16. SQLite pour les applications en lecture seule?
- 17. CVS lecture seule extraction
- 18. Lecture seule spinner
- 19. Lecture seule TextBox
- 20. WCF DataContract sérialisation des propriétés en lecture seule?
- 21. SQL2000 Lecture seule Afficher
- 22. .NET Framework: Comment rendre RichTextBox true en lecture seule?
- 23. Comment rendre un WPF WebBrowser en lecture seule?
- 24. comment créer une session en lecture seule dans nHiberate?
- 25. Comment faire un fichier réseau partagé en lecture seule en utilisant Python?
- 26. Django Foreign Keys Lecture seule
- 27. Pourquoi les propriétés des types anonymes en C# sont-elles en lecture seule?
- 28. Comment vérifier si une cellule est en lecture seule dans EXCEL en utilisant C#
- 29. Y a-t-il un surcoût d'exécution en lecture seule?
- 30. Comment faire pour aller-retour des données en lecture seule entre les vues et les contrôleurs