WMI - запрос нескольких данных - PullRequest
0 голосов
/ 02 марта 2012

Я хочу получить несколько сведений с нескольких серверов в моей среде.

Этот код работает, но является ли этот код хорошим способом получения информации?

Можно ли вызывать "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"]);
}

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Я сделал нечто подобное. Мое приложение работает дольше, поэтому я сохраняю один ManagementScope на машину и один ManagementObjectSearcher на запрос на машину. Я избавляюсь от этих объектов только тогда, когда получаю какую-либо ошибку во время запроса.

1 голос
/ 02 марта 2012

Вы должны повторно использовать ManagementObjectSearcher, так как он подключается к серверу каждый раз, и это будет непроизводительным расходом.

Для большей эффективности, вместо использования SELECT * FROM в вашем wql, вы можете указать, какие свойства вы хотите, то есть

SELECT LoadPercentage FROM Win32_ComputerSystem
...