문제

Jacob을 사용하여 WMI를 통해 시스템 정보에 액세스하고 있습니다. 웹에서 WMI와 Jacob에 대한 문서를 많이 찾지 못했고 코드를 좀 더 효율적으로 만드는 데 도움이 될 수 있는지 궁금했습니다.

코드는 다음과 같습니다.

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에 대한 경험이 많고 가능한 최선의 방법으로 이러한 가치를 검색하는 사람이 있습니까?

감사,

스티브

도움이 되었습니까?

해결책

내 이해는 일반적으로 WMI는 항상 모든 execquery에 대해 0 이상의 항목 모음을 반환한다는 것입니다. 그리고 Jacob의 열거적인 클래스가 WMI (내가 본 예제에서)에서 정보를 수신하는 가장 좋은 방법이라면 어떤 식 으로든 열거해야합니다.

(여러 줄을 함께 압축 할 수 있습니다. EnumVariant enumVariant = new EnumVariant( mActiveXWMI.invoke("ExecQuery", new Variant(query)).toDispatch() );-하지만 그로 인해 읽기가 더 어려워지고 성능이나 그 밖의 어떤 것도 도움이되지 않습니다.)

쿼리가 예를 들어와 같이 하나 이상의 항목을 반환 할 것입니다. "while"을 "if"문으로 변경 ( "다른"조항에서 실패한 경우를 처리합니다).

그러나 그렇지 않으면 ... 나는 그것이 당신이 이미 가지고있는 것보다 훨씬 짧게 될 것이라고 생각하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top