すべてのアクティブなプロセスをループして、タスク マネージャーに似たような診断チェック (メモリ使用量、CPU 時間など) を行う方法を見つけたいと思います。
問題は次の 2 つの部分に分けられます。
- すべてのプロセスを見つける
- それらに関する診断属性の検索
どの名前空間で調べればよいかさえわかりません。ヘルプ/ヒント/リンクに感謝します。
すべてのアクティブなプロセスをループして、タスク マネージャーに似たような診断チェック (メモリ使用量、CPU 時間など) を行う方法を見つけたいと思います。
問題は次の 2 つの部分に分けられます。
どの名前空間で調べればよいかさえわかりません。ヘルプ/ヒント/リンクに感謝します。
すべてのプロセスを見つける
Process クラスを介してこれを行うことができます
using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();
診断の実行
ここでもう少し情報を教えていただけますか?あなたが何をしたいのかは明らかではありません。
Process クラスは、役立つ情報を少し提供します。このクラスに対してクエリを実行できます
編集
OPは、メモリとCPUの情報を取得したいと述べました。これらのプロパティは、Process クラス (GetProcesses() によって返される) ですぐに使用できます。以下は、サポートされているすべてのプロパティを一覧表示する MSDN ページです。ニーズに合ったさまざまなメモリと CPU が利用可能です。
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
コード:
次の行を使用リストに追加します。
using System.Diagnostics;
次の例に示すように、Process.GetProcesses() メソッドを使用してプロセスのリストを取得できるようになりました。
Process[] processlist = Process.GetProcesses();
foreach (Process theprocess in processlist)
{
Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
実際には、すべてのプロセスを見つけるのはかなり簡単です。
using System.Diagnostics;
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
// Get whatever attribute for process.
}
JaredPar はすでにこのクラスを指摘しているProcess
ので、インスタンスの作成時にクラスがプロセス情報のスナップショットを取得することに注意してください。ライブビューではありません。更新するにはRefresh()
、インスタンスを呼び出す必要があります。
また、検査中にプロセスが終了する可能性があることにも注意してください。そのため、例外をキャッチしてそれに応じて処理する準備をしてください。
そして最後に呼び出すProcess.GetProcesses()
と、疑似プロセス「idle」と「system」も取得されます。IIRC には特定のプロセス ID があるため、簡単に除外できます。
使用しているオペレーティング システムは何ですか? あなたの C# タグから、Windows だと思いますか?
その場合は、WMI、特に Win32_Process クラスを調べてください。MSDN リファレンスは次のとおりです: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx
ここでのいくつかの使用シナリオ (プロセスのリストの取得など): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx
PowerShellでこれを行うことができます
1.すべてのプロセスを見つける
get-Process
2.それらに関する診断属性の検索
get-Process | where-object { $_.Handles -gt 200 }
上記のコードは、200 を超えるハンドルを持つすべてのプロセスを返します。この方法で簡単に診断属性を指定できます。