He heredado el código que realiza numerosas llamadas WMI remotas. Cuando paro repetidamente la ejecución y miro la pila de llamadas, casi siempre aparece en una llamada ManagementScope.Connect()
. Parece que se hace una nueva conexión con cada consulta WQL.¿Cómo puedo mejorar el rendimiento de WMI en .NET?
A pesar de la prueba y error limitados, aún no he encontrado grandes ganancias para mejorar el rendimiento de las llamadas WMI.
He intentado almacenar en caché los resultados anteriores, reutilizando las conexiones y evitando el temido "select *
". Estos no me han dado las mejoras de rendimiento que me gustaría. Estoy interesado en comprender el impacto del entorno en el rendimiento de WMI, pero el código debe ejecutarse en una amplia variedad de entornos que probablemente estén fuera de mi control.
En caso afirmativo, ¿qué es lo que se debe y no se debe al acceso WMI orientado al rendimiento en .NET?
¿Está realizando múltiples llamadas a la misma máquina o a muchas máquinas? Si esto último, ¿ha considerado multi-threading? – serialhobbyist
Por ahora es la misma máquina; el código es para instalaciones remotas automáticas. El código primero determina qué dependencias ya se han instalado, consulta el sistema operativo (determinando cosas como la arquitectura del procesador, el directorio del sistema, el directorio de archivos de programa, la versión del sistema operativo, etc.); hace esto para configurar la instalación, luego usa WMI para iniciar y monitorear la instalación. Se ha solicitado una función para permitir que estos se pongan en cola y se ejecuten en paralelo (por ejemplo, 5 a la vez). Buena sugerencia. – devgeezer
Ah-hah. He hecho algo muy similar en vbscript. El mío fue desagradable y doloroso. Te deseo lo mejor. – serialhobbyist