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

、何をしたいプロパティを指定することができ、もう少し効率のため

、。私のアプリケーションは長時間実行されているので、1台のマシンにはManagementScopeを、マシンごとに1つのクエリにはそれぞれを割り当てます。クエリ中にエラーが発生した場合にのみ、これらのオブジェクトを破棄します。

1

あなたはManagementObjectSearcherを再利用する必要があります。代わりにあなたのWQLでSELECT * FROMを使用してのあなたは、私は似たような行っているすなわち

SELECT LoadPercentage FROM Win32_ComputerSystem 
関連する問題