web-dev-qa-db-ja.com

.NETで現在のプロセスの合計メモリ消費をプログラムで測定する方法は?

.NETで現在のプロセスの合計メモリ消費をプログラムで測定する方法は?

54
Jader Dias

これを参照してください SOの質問

さらにこれを試してください

Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
52
HotTester

いくつかの明確な操作による仮想メモリ使用量の増加のみを測定する場合は、次のパターンを使用できます。

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

var before = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;

// performs operations here

var after = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;

もちろん、これは、上記の操作の実行中にアプリケーションが他のスレッドで操作を実行しないことを前提としています。

VirtualMemorySize64を、興味のある他のメトリックに置き換えることができます。 System.Diagnostics.Process タイプを見て、利用可能なものを確認してください。

32
Adam Ralph
3
Kris Krause

私はこれが非常に便利だと感じました:

Thread.MemoryBarrier();
var initialMemory = System.GC.GetTotalMemory(true);
// body
var somethingThatConsumesMemory = Enumerable.Range(0, 100000)
    .ToArray();
// end
Thread.MemoryBarrier();
var finalMemory = System.GC.GetTotalMemory(true);
var consumption = finalMemory - initialMemory;
2
Jader Dias