2009-09-14 13 views
7

Estoy usando el espacio de nombres System.Management en .Net para ejecutar varias consultas WMI en un servidor remoto. En mis registros puedo ver que a veces las consultas tardan 30 o 40 segundos en completarse mientras que otras las consultas se completan en menos de un segundo.¿Por qué las consultas WMI son tan lentas algunas veces?

Cuando veo estas consultas lentas, trato de conectarme a la caja usando wbemtest, pero siempre se conecta y ejecuta la consulta rápidamente.

¿Alguna idea, consejos, sugerencias?

Me di cuenta al mirar en System.Management.ManagementScope en el reflector que parece perder un puntero IWbemServices. Parece que se trata de una interfaz COM que necesita tener Release llamado en él (Marshal.ReleaseComObject()). No estoy seguro si eso está relacionado o no. Me conecto a muchos servidores diferentes durante la vida del proceso.

Respuesta

2

Tengo el mismo tipo de aplicación que hace múltiples consultas WMI en todos los diferentes tipos de dispositivos y experimento el mismo comportamiento. El uso de wbemtest a veces es más rápido, pero no necesariamente. También encuentro que algunas consultas en la misma máquina se comportan de manera diferente que otras consultas en la misma máquina, simplemente porque una clase diferente es consultas.

Hay una propiedad ReturnImmediately perteneciente a la clase EnumerationOptions que puede ayudarlo a obtener los resultados más rápido si los obtiene en un solo lote en lugar de enumerarlos en la red.

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

Puede intentarlo y ver si ayuda. Sé que esto no es lo que quieres escuchar, pero mi opinión personal es que no hay mucho que puedas hacer. Necesita escribir un código para trabajar alrededor del problema. La respuesta real se encuentra en algún lugar profundamente enterrado en los cuencos de DCOM, el protocolo WMI y el repositorio de WMI.

+0

Tristemente, creo que tienes razón. Solo necesito solucionar el problema. El ajuste ReturnImmediately ayudó un poco pero no lo suficiente para resolver el problema. –

0

¿El problema es específico de una caja? Una vez tuve el mismo problema con un escenario remoto. Lo arreglé reconstruyendo la pila TCP/IP en la caja que hace la llamada remota.

+0

No. Esto sucede a varios de los equipos de destino (pero no todos ellos). En el momento en que veo las consultas lentas en los registros e intento consultar manualmente, el problema se soluciona. –

+0

¿Qué pasa con las computadoras fuente (las que hacen las llamadas)? ¿El problema es específico de alguno de ellos? –

+0

Sí y No :). Hay varias computadoras de origen que tienen este problema, pero no todos los servidores en los que intento esto tienen este problema. –

2

Puede tratar de configurar el campo WITHIN para ver si obliga a que la consulta suceda antes. ¿Podría publicar la consulta que está utilizando? Eso podría ayudar a depurar cualquier problema adicional

0

Mire en los indicadores WBEM_FLAG_RETURN_IMMEDIATE & WBEM_FLAG_FORWARD_ONLY para su idioma. Cuando se utiliza Scriptomatic (gran pequeña GUI de VBScript de MS para realizar llamadas WMI), esta opción se agrega automáticamente como parte de las opciones. El 48 significa WBEM_FLAG_RETURN_IMMEDIATE | WBEM_FLAG_FORWARD_ONLY. VBScript ejemplo:

objWMIService.ExecQuery ("Select * from Win32_NetworkConnection",,48) 

https://msdn.microsoft.com/en-us/library/aa390880(v=vs.85).aspx

Cuestiones relacionadas