10
votes

Pourquoi les requêtes WMI sont-elles si lentes parfois?

J'utilise l'espace de noms System.Management dans un fichier .NET pour exécuter diverses requêtes WMI contre un serveur distant. Dans mes journaux, je peux voir que parfois les requêtes prennent 30 ou 40 secondes pour terminer pendant les autres fois que les requêtes sont complètes en moins d'une seconde.

Lorsque je vois ces requêtes lentes, j'essaie de me connecter à la boîte à l'aide de WBemTest, mais il connecte toujours et exécute la requête rapidement.

Des idées, des pointeurs, des suggestions?

J'ai remarqué lors de la recherche de System.Management.Managscope dans le réflecteur qu'il semble fuir un pointeur IwbemServices. Il semble que ceci est une interface COM qui doit avoir une libération appelée dessus (marshal.ReleeSecomObject ()). Je ne sais pas si cela est lié ou non. Je me connecte à beaucoup de serveurs différents au cours de la vie du processus.


0 commentaires

4 Réponses :


1
votes

est le problème spécifique à une boîte? J'ai eu une fois ce même problème avec un scénario de télécommande. Je l'ai corrigé en reconstruisant la pile TCP / IP sur la boîte en faisant l'appel de télécommandation.


4 commentaires

Non, cela arrive à plusieurs des ordinateurs cibles (mais pas tous). Au moment où je vois les requêtes lentes dans les bûches et essayer d'interroger manuellement, le problème est corrigé.


Qu'en est-il des ordinateurs source (ceux qui apportent les appels)? Le problème est-il spécifique à l'un d'entre eux?


Oui et non :). Les ordinateurs sources sont-ils multiples ayant ce problème, mais pas tous les serveurs que j'essaie de ce problème a ce problème.


Vous pouvez essayer de configurer votre code pour ping la machine avant de créer l'appel WMI et de vous enregistrer sur le temps de ping. Cela pourrait éclairer si les communications réseau sont un problème.




2
votes

J'ai le même type d'application qui fait plusieurs requêtes WMI sur tous les types de périphériques et je ressens le même comportement. L'utilisation de WBemTest est parfois plus rapide mais pas nécessairement. Je trouve également certaines requêtes sur la même machine se comporter différemment, puis d'autres requêtes sur la même machine simplement parce qu'une classe différente est des requêtes.

Il y a une propriété retournée appartenant à la classe énuméranteOptions qui pourrait vous aider à obtenir les résultats plus rapidement si vous obtenez eux dans un lot au lieu de leur énumérer sur le réseau. P>

EnumerationOptions options = new EnumerationOptions();
options.ReturnImmediately = false;


1 commentaires

Malheureusement, je pense que vous êtes correct. J'ai juste besoin de travailler autour de la question. Le réglage de manière renvoyée a aidé un peu mais pas assez pour résoudre le problème.