2012-03-02 67 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