45

すべてのアクティブなプロセスをループして、タスク マネージャーに似たような診断チェック (メモリ使用量、CPU 時間など) を行う方法を見つけたいと思います。

問題は次の 2 つの部分に分けられます。

  1. すべてのプロセスを見つける
  2. それらに関する診断属性の検索

どの名前空間で調べればよいかさえわかりません。ヘルプ/ヒント/リンクに感謝します。

4

7 に答える 7

91

すべてのプロセスを見つける

Process クラスを介してこれを行うことができます

using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();

診断の実行

ここでもう少し情報を教えていただけますか?あなたが何をしたいのかは明らかではありません。

Process クラスは、役立つ情報を少し提供します。このクラスに対してクエリを実行できます

  • すべてのスレッド
  • メイン ウィンドウ ハンドル
  • ロードされたすべてのモジュール
  • メモリに関するさまざまな診断情報 (ページ、仮想、ワーキング セットなど...)
  • 基本的なプロセス情報 (ID、名前、ディスクの場所)

編集

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);
}
于 2009-03-15T19:47:11.350 に答える
12

実際には、すべてのプロセスを見つけるのはかなり簡単です。

using System.Diagnostics;

Process[] processes = Process.GetProcesses();

foreach (Process process in processes)
{
    // Get whatever attribute for process.
}
于 2009-03-15T19:56:24.497 に答える
10

JaredPar はすでにこのクラスを指摘しているProcessので、インスタンスの作成時にクラスがプロセス情報のスナップショットを取得することに注意してください。ライブビューではありません。更新するにはRefresh()、インスタンスを呼び出す必要があります。

また、検査中にプロセスが終了する可能性があることにも注意してください。そのため、例外をキャッチしてそれに応じて処理する準備をしてください。

そして最後に呼び出すProcess.GetProcesses()と、疑似プロセス「idle」と「system」も取得されます。IIRC には特定のプロセス ID があるため、簡単に除外できます。

于 2009-03-15T19:59:30.773 に答える
0

使用しているオペレーティング システムは何ですか? あなたの 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

于 2009-03-15T19:48:53.030 に答える
0

PowerShellでこれを行うことができます

1.すべてのプロセスを見つける

get-Process 

2.それらに関する診断属性の検索

get-Process | where-object { $_.Handles -gt 200 }

上記のコードは、200 を超えるハンドルを持つすべてのプロセスを返します。この方法で簡単に診断属性を指定できます。

powershell を使用してプロセスを処理する方法の詳細については、これを参照してください

于 2009-03-15T21:30:55.297 に答える