Pregunta

Estoy usando JACOB para acceder a la información del sistema a través de WMI. No he encontrado mucha documentación para WMI y Jacob en la web y me preguntaba si podría obtener ayuda para hacer que el código sea un poco más eficiente.

Aquí está el código:     

ActiveXComponent mActiveXWMI = new ActiveXComponent("winmgmts:\\\\localhost\\root\\CIMV2");
String query = "SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name='_Total'";
Variant vCollection = mActiveXWMI.invoke("ExecQuery", new Variant(query));

EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch());
Dispatch item = null;
while (enumVariant.hasMoreElements()) {
    item = enumVariant.nextElement().toDispatch();
    cpuUsage = Double.parseDouble(Dispatch.call(item, "PercentProcessorTime").toString());
}

Como se puede ver, no parece tener mucho sentido recorrer una colección para un solo elemento. Me gustaría consultar solo una columna en la declaración de consulta y obtener el resultado de la forma más rápida y eficiente posible, con la menor sobrecarga posible.

¿Alguien tiene mucha experiencia con JACOB y recupera estos valores de la mejor manera posible?

Gracias,

Steve

¿Fue útil?

Solución

Entiendo que, en general, WMI siempre devolverá una colección de cero o más elementos para cualquier ExecQuery. Y si la clase EnumVariant de JACOB es la mejor manera de recibir la información de WMI (de los ejemplos que he visto), entonces debe enumerarla de una forma u otra.

(Es posible que pueda comprimir algunas líneas más juntas, como EnumVariant enumVariant = new EnumVariant (mActiveXWMI.invoke (" ExecQuery " ;, new Variant (query)). toDispatch ()); - pero eso hace que sea aún más difícil de leer, y no ayudará al rendimiento ni a nada.)

Si está seguro de que la consulta no devolverá más de un elemento, como en su ejemplo, puede cambiar el " while " a un " si " declaración (y luego maneje el caso donde falla en su " otra " cláusula).

Pero de lo contrario ... no creo que sea mucho más corto de lo que ya tienes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top