2009-05-09 12 views
17

Ich habe Probleme dabei, herauszufinden, wie genau ich die RAM-Auslastung eines Prozesses erhalte. (Wie viel RAM es derzeit verbraucht, nicht wie viel ist reserviert, oder seine max oder min)Die RAM-Auslastung eines Prozesses ermitteln

Lets sagen, ich habe einen Prozess läuft im Hintergrund, Java.exe, es ist erlaubt, 1024 MB RAM zu verwenden, Wie kann ich sagen, wie viel RAM es gerade benutzt?

Ich beginne den Prozess selbst, also habe ich Zugriff auf das Process-Objekt, ich möchte nur ein wenig mehr Klarheit darüber, welche Eigenschaft ist die für mich.

+0

Mögliche Duplikat [Wie Speicher verfügbar oder in C# gewöhnen] (https://stackoverflow.com/questions/750574/how-to- get-memory-available-or-used-in-c-sharp) – Saul

Antwort

16

Wenn Sie rein physikalischen Speicher interessiert sind, möchten Sie wahrscheinlich WorkingSet64, die "die Menge an physischem Speicher für den zugeordneten Prozess zugeordnet." Verstehen Sie, dass dieser Wert ständig schwankt und dass der Wert, den dieser Anruf Ihnen gibt, möglicherweise nicht auf dem neuesten Stand ist. Sie könnten auch interessiert sein an PeakWorkingSet64, die gibt "die maximale Menge an physischem Speicher verwendet von dem zugehörigen Prozess."

+4

Achten Sie jedoch auf [gesperrte Seiten] (http://forum.sysinternals.com/topic23886_post122660.html), die nicht zum Arbeitssatz gehören ((seltsam genug), und der [Standard-Task-Manager sieht sie auch nicht] (http://blogs.msdn.com/b/psssql/archive/2009/09/11/fun-with-locked-pages-awe- task-manager-and-the-working-set.aspx) (obwohl sie am ehesten konsumiert werden: D) –

+0

Ich möchte PeakWorkingSet64 verwenden, um den maximal vom Prozess verwendeten Speicher zu erhalten, aber Ich weiß nicht, wann diese Eigenschaft den höchsten Genauigkeitswert erhalten soll. Ich denke, der beste Moment, um die Eigenschaft zu erhalten, ist, wenn der Prozess "OnExitting" ist, aber Prozessklasse don 'dieses Ereignis haben. Es ist nur Exited Event – Andiana

26

fand ich diese auf Msdn und es funktioniert

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

Dies ist die wahre Antwort –

+1

Ich glaube nicht, dass Sie die Ganzzahl Sie tun müssen? – Codingale

+0

@Laz getestet und der zurückgegebene Wert ist der genaueste im Vergleich zum Task-Manager. aber für einige Multithread-Prozess wie Google Chrome, es nicht möglich, genaue Ergebnisse, irgendwelche Ideen? – Dennis

Verwandte Themen