我希望从我的环境中的几台服务器获取多个信息。
此代码正常运行,但此代码是获取信息的好方法吗?
可以在每次请求时调用“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"]);
}
答案 0 :(得分:1)
每次连接到服务器时都应该重用ManagementObjectSearcher
,这将是一个开销。
为了提高效率,您可以指定所需的属性,而不是在您的wql中使用SELECT * FROM
,即
SELECT LoadPercentage FROM Win32_ComputerSystem
答案 1 :(得分:1)
我做了类似的事情。我的应用程序运行时间较长,因此每台计算机保留一个ManagementScope
,每台计算机每个查询保留一个ManagementObjectSearcher
。如果在查询期间出现任何错误,我只处理这些对象。