🗿
[C#/WMI] WMIで、全プロセスのCPU時間やメモリ使用量をとる
もくじ
やりたいこと
以前の記事で、あるプロセスのCPU時間を取ったが、今度は全プロセスのCPU時間を取りたい。ついでにメモリ使用量もとりたい。
やり方
「Win32_Process」 をつかう。
サンプルコード
using System;
using System.Management;//System.Management.dllを参照に追加
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Process");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
using (ManagementObjectCollection queryCollection = searcher.Get())
{
foreach (ManagementObject m in queryCollection)
{
// WMIオブジェクトのプロパティを取得して表示
Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}", m["ProcessId"], m["Name"], m["KernelModeTime"], m["UserModeTime"], m["WorkingSetSize"], m["ExecutablePath"], m["Description"]);
m.Dispose();
}
}
searcher.Dispose();
Console.ReadLine();
}
}
}
結果
こんな感じで、プロセスの情報が全部ダーっととれる。
そのプロセスの「親のPID」も取れるので、それを使ってプロセスの親子関係を調べることもできそう。(プロセスツリー的なものも作れるかも)
別解
using (ManagementClass managementClass = new ManagementClass("Win32_Process"))
{
managementClass.Get();
using (ManagementObjectCollection managementObjectCollection = managementClass.GetInstances())
{
foreach (ManagementObject m in managementObjectCollection)
{
Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}", m["ProcessId"], m["Name"], m["KernelModeTime"], m["UserModeTime"], m["WorkingSetSize"], m["ExecutablePath"], m["Description"]);
m.Dispose();
}
}
}
Discussion