Pergunta

Eu estou usando JACOB à informação sistema de acesso através do WMI. Eu não encontrei muita documentação para WMI e Jacob na web e queria saber se eu poderia obter alguma ajuda em tornar o código um pouco mais eficiente.

Aqui está o 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 pode ver, não parece fazer muito sentido de looping através de uma coleção de apenas um item. Eu gostaria apenas de consulta para uma coluna na instrução de consulta e obter o resultado de que o mais rápido e eficiente possível, com o mínimo de sobrecarga possível.

Alguém tem muita experiência com JACOB e recuperar esses valores da melhor maneira possível?

Obrigado,

Steve

Foi útil?

Solução

O meu entendimento é que, em geral, WMI sempre retornará uma coleção de zero ou mais itens para qualquer ExecQuery. E se a classe EnumVariant de Jacó é a melhor maneira de receber a informação de WMI (a partir dos exemplos que eu vi), então você precisa para enumerar através dele, de uma maneira ou de outra.

(Você pode ser capaz de comprimir mais algumas linhas juntos, como EnumVariant enumVariant = new EnumVariant( mActiveXWMI.invoke("ExecQuery", new Variant(query)).toDispatch() ); -., Mas que torna ainda mais difícil de ler, e não vai desempenho ajuda ou qualquer coisa)

Se você está certo de que a consulta retornará não mais do que um item - como no seu exemplo - você poderia alterar o "enquanto" a um "if" (e então lidar com a caso em que ele falha em sua cláusula "else").

Mas por outro lado ... Eu não acho que ele vai ficar muito mais curto do que o que você já tem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top