2012-03-16 3 views
1

여기 WMI와 관련하여 많은 게시물을 검토 한 결과 여전히 약간의 문제가 있습니다. WMI에서 CPU 사용을 다시 얻고 싶습니다. 내 쿼리는 ManagementObjectSearcher가 제공해야하는 모든 것을 검색하지만 null을 반환하고 정보를 다시 가져 오지 않습니다.WMI의 프로세서 수에 액세스

데이터 형식의 경우 int16을 사용해야합니까?

누군가가이 문제에 대해 조금이라도 밝히고 나를 길을 보내길 바랍니다. 감사.

public void GetPhysicalMemory() 
{ 
    ManagementObjectSearcher mgtObj = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_ComputerSystem"); // Win32_OPeratingSystem"); 
    ManagementObjectCollection mgtColl = mgtObj.Get(); 

    // foreach (ManagementObject obj in mgtObj.Get()) 
    if (mgtColl.Count != 0) 
    { 
     foreach (ManagementBaseObject mgtBaseObj in mgtColl) 
     { 
      var[] data = mgtBaseObj["NumberOfProcessors"] as int16[]; 

      if (data != null) 
      { 
       Console.WriteLine(data); 
      } 
      else 
      { 
       Console.WriteLine("Collection = null"); 
       Console.Read(); 
       Console.Read(); 

      } 
     } 
    } 
+0

프로세서 수 또는 CPU 사용량을 확인 하시겠습니까? – RRUZ

+1

실제로 CPU 사용량을 반환하기 위해 더 많은 것을 찾고 있습니다. 어둠 속에서 찌르다가 NumberOfProcessors를 사용하여 무엇이든 다시 잡았습니다. – jpavlov

답변

0

당신은 항목 속성 또는 [] 표기법을 사용하여 각 속성을 액세스 할 수있는 액세스 할 수있는 여기에서 보면 ManagementObject 변수를 사용 ManagementObjectSearcher.Get 방법에 의해 반환 된 컬렉션을 통해 직접적으로 반복 할 수있다.

이 샘플 응용 프로그램을 확인하십시오.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Management; 
using System.Text; 

namespace ConsoleFoo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       ManagementObjectSearcher mgtObj = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_ComputerSystem"); 
       foreach (ManagementObject item in mgtObj.Get()) 
       { 
        Console.WriteLine("Number Of Processors {0}", item["NumberOfProcessors"]); 
       } 
      } 
      catch (ManagementException e) 
      { 
       Console.WriteLine("Exception {0} ", e.Message); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 
+0

어떤 컬렉션이 CPU 사용량을 가지고 있는지 알고 있습니까? – jpavlov

+0

성능 카운터에 액세스해야하며 [Win32_PerfFormattedData_PerfProc_Process]와 같은 클래스를 사용해보십시오 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa394277%28v=vs.85%29.aspx) – RRUZ