0

我想从我环境中的几台服务器获取多个信息。

此代码有效,但此代码是获取信息的好方法吗?

每次请求都可以调用“新的 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"]);
}
4

2 回答 2

1

您应该重用它,ManagementObjectSearcher因为它每次都连接到服务器,这将是一个开销。

为了提高效率,SELECT * FROM您可以指定您想要的属性,而不是在您的 wql 中使用,即

SELECT LoadPercentage FROM Win32_ComputerSystem
于 2012-03-02T11:57:13.763 回答
1

我做过类似的事情。我的应用程序运行时间更长,所以我为每台机器保留一个ManagementScope,每台机器ManagementObjectSearcher每个查询一个。只有在查询过程中出现任何错误时,我才会处理这些对象。

于 2012-03-02T11:57:49.250 回答