Лучший код с использованием Jacob и WMI - PullRequest
2 голосов
/ 30 ноября 2009

Я использую JACOB для доступа к системной информации через WMI. В Интернете я не нашел много документации по WMI и Джейкобу, и мне было интересно, могу ли я получить некоторую помощь в том, чтобы сделать код немного более эффективным.

Вот код:

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());
}

Как видите, кажется, что нет смысла перебирать коллекцию только для одного элемента. Я хотел бы просто запросить один столбец в операторе запроса и получить из этого результат как можно быстрее и эффективнее, с минимальными накладными расходами.

Есть ли у кого-нибудь большой опыт работы с JACOB и получения этих значений наилучшим возможным способом?

Спасибо

Steve

1 Ответ

2 голосов
/ 22 декабря 2009

Насколько я понимаю, в общем, WMI всегда будет возвращать набор из нуля или более элементов для любого ExecQuery. И если класс JACOB EnumVariant является лучшим способом получения информации от WMI (из примеров, которые я видел), то вам нужно перечислить ее так или иначе.

(Возможно, вы сможете сжать еще несколько строк, например EnumVariant enumVariant = new EnumVariant( mActiveXWMI.invoke("ExecQuery", new Variant(query)).toDispatch() ); - но это усложнит чтение и не повлияет на производительность или что-то в этом роде.)

Если вы уверены, что запрос вернет не более одного элемента - как в вашем примере - вы можете изменить выражение "while" на выражение "if" (и затем обработать регистр где он терпит неудачу в вашем предложении "else").

Но в остальном ... я не думаю, что это станет намного короче того, что у вас уже есть.

...