2009-05-09 20 views
17

プロセスのRAM使用量を正確に把握するためにいくつかの問題がありました。 (どれくらいの量のRAMが現在消費されているか、どのくらいの量が予約されているのか、最大値か最小値か)プロセスのRAM使用率を取得する

私は、Java.exeのバックグラウンドでプロセスを実行しているとします。どのくらいの量のRAMが現在使用されているかをどのように伝えることができますか

私は自分自身でプロセスを開始しているので、プロセスオブジェクトにアクセスできます。私は、どのプロパティが私のものであるかについてもう少し明確にしたいと思います。

+0

が重複する可能性が働いています(https://stackoverflow.com/questions/750574/how-to- get-memory-available-in-c-sharp) – Saul

答えて

16

純粋に物理メモリに興味がある場合は、おそらくWorkingSet64が必要です。これは、「関連付けられたプロセスに割り当てられた物理メモリの量」を示します。この値が常に変動し、この呼び出しが提供する値が最新でない可能性があることを理解してください。 PeakWorkingSet64に興味があるかもしれません。これは、「関連付けられたプロセスで使用される物理メモリの最大量」を示します。

+4

[ロックされたページ](http://forum.sysinternals.com/topic23886_post122660.html)に注意してください。これらは作業セットの一部ではありません奇妙なことですが)、[標準タスクマネージャーにも表示されません](http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe-タスクマネジャーとワーキングセット.aspx)(もっとも確かに消費されているものの、D) –

+0

PeakWorkingSet64を使用してプロセスで使用される最大メモリを取得したい私はいつこの物件に最も正確な価値を与えるのか分かりません。私はプロパティを取得する最善の瞬間は、プロセスが "OnExitting"のときだと思うが、Processクラスはこのイベントを持っていない。それはちょうど終了しましたイベントを終了 – Andiana

26

私は、MSDNでこれを発見し、それが[メモリが利用可能か、C#で使用取得する方法]の

System.Diagnostics.Process proc = assign your process here :-) 

int memsize = 0; // memsize in Megabyte 
PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = proc.ProcessName; 
memsize = Convert.ToInt32(PC.NextValue())/(int)(1024); 
PC.Close(); 
PC.Dispose(); 
+1

これは本当の答えです –

+1

私はあなたが整数をキャストする必要はないと思いますか? – Codingale

+0

@Lazがテストされ、戻り値はタスクマネージャと比較して最も正確です。しかし、Google Chromeのようなマルチスレッドプロセスでは、正確な結果を得ることができませんでした。 – Dennis

関連する問題