2012-03-02 66 views
0

我想從我的環境中的幾臺服務器獲取多個信息。WMI - 查詢多個信息

此代碼正在工作,但此代碼是獲取信息的好方法嗎?

可以在每次請求時調用「new ManagementObjectSearcher」嗎?

ManagementObjectSearcher cpuUsage = new ManagementObjectSearcher 
     ("\\\\" + strComputer + "\\root\\CIMV2", 
     "SELECT * FROM Win32_Processor"); 

foreach (ManagementObject queryObj in cpuUsage.Get()) 
{ 
    Console.WriteLine("LoadPercentage: {0}", queryObj["LoadPercentage"]); 
} 

ManagementObjectSearcher totalRAM = new ManagementObjectSearcher 
     ("\\\\" + strComputer + "\\root\\CIMV2", 
     "SELECT * FROM Win32_ComputerSystem"); 

foreach (ManagementObject queryObj in totalRAM.Get()) 
{ 
    Console.WriteLine("TotalPhysicalMemory: {0}", queryObj["TotalPhysicalMemory"]); 
} 

ManagementObjectSearcher freeRAM = new ManagementObjectSearcher 
    ("\\\\" + strComputer + "\\root\\CIMV2", 
     "SELECT * FROM Win32_PerfFormattedData_PerfOS_Memory"); 

foreach (ManagementObject queryObj in freeRAM.Get()) 
{ 
    Console.WriteLine("AvailableMBytes: {0}", queryObj["AvailableMBytes"]); 
} 

回答

1

我已經做了類似的事情。我的應用程序運行時間更長,因此每臺機器保留一個ManagementScope,每臺機器每個查詢保留一個ManagementObjectSearcher。如果在查詢過程中遇到任何錯誤,我只會處理這些對象。

1

你應該重用ManagementObjectSearcher,因爲它每次連接到服務器,這將是一個開銷。

對於多一點效率,而不是在你的WQL使用SELECT * FROM你可以指定你想要的屬性,即

SELECT LoadPercentage FROM Win32_ComputerSystem