it-swarm.com.de

Wie kann der Gesamtspeicherverbrauch des aktuellen Prozesses programmgesteuert in .NET gemessen werden?

Wie kann der Gesamtspeicherverbrauch des aktuellen Prozesses programmgesteuert in .NET gemessen werden?

54
Jader Dias

Siehe hierzu SO-Frage

Versuchen Sie dies weiter

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

Wenn Sie nur die Zunahme der virtuellen Speichernutzung messen möchten, die durch bestimmte Vorgänge verursacht wird, können Sie das folgende Muster verwenden:

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

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

// performs operations here

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

Dies setzt natürlich voraus, dass Ihre Anwendung keine Vorgänge für andere Threads ausführt, während die oben genannten Vorgänge ausgeführt werden.

Sie können VirtualMemorySize64 Durch eine beliebige andere Metrik ersetzen, die Sie interessiert. Sehen Sie sich den Typ System.Diagnostics.Process an, um zu sehen, was verfügbar ist.

32
Adam Ralph
3
Kris Krause

Ich fand das sehr nützlich:

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