2014-12-31 7 views
8

Ich versuche, die Speichernutzung von meiner Anwendung zu bekommen, aber aus irgendeinem Grunde, den ich unterschiedliche Größe ist immer als im Task-ManagerWie wird die Anwendungsspeicherauslastung wie im Task-Manager angezeigt?

ich verwende:

enter image description here

Task-Manager zeigt, dass meine Bewerbung besetzt 45mb, während, wenn ich es in meinem Code ziehe ich bekomme 85mb wie kann ich die gleiche Größe wie in Task-Manager (ohne wmi)

+1

hinzufügen 'process.Refresh()', bevor Sie anrufen 'process.PrivateMemorySize64' –

+0

nicht geholfen haben, die gleichen Werte erhalten wie zuvor – atikot

+0

Windows-Version? – kennyzx

Antwort

6

Vermutlich suchen Sie die falsche Spalte in "Task-Manager" oder mit die falsche Eigenschaft in Pr ocess class ..

Ich glaube, Sie suchen nach WorkingSet64 nicht PrivateMemorySize64. PrivateMemorySize64 ist die Menge an virtuellem Speicher, die für den Prozess reserviert ist, nicht der physische Speicher. Für physischen Speicher verwenden Sie WorkingSet64.

Sie müssen auch process.Refresh() aufrufen, bevor Sie auf eine der dynamischen Eigenschaften in der Prozessklasse zugreifen, da diese stark zwischengespeichert ist.

process.Refresh(); 
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture); 
+0

ich hinzugefügt aktualisieren und hochgeladen den Code beim Debuggen, wie Sie sehen, die Speichergröße ist anders, auch gibt es keine drastischen Änderungen der Speichergröße ist es ziemlich stabil bei 45-47mb ~ – atikot

+0

Überprüfen Sie nicht den Prozess Speicher beim Debuggen. Führen Sie den Prozess aus dem Debugger aus, und überprüfen Sie. Beim Debuggen von Visual Studio wird der Hosting-Prozess für Sie * YourProcess.vshost.exe * ausgeführt. Das kann zu Verwirrung führen. Ich testete dies mit dem Drucken der Ausgabe in der Konsole (aus dem Visual Studio) und das hat perfekt funktioniert. Ändere auch das 'Sleep (200)' in 'Sleep (1000)', so dass es mit dem Task-Manager synchronisiert wird. –

+0

Ich versuche ohne Visual Studio und Debug und es ist immer noch nicht richtig, ich sehe nicht die vshost im Task-Manager auch – atikot

0

Versuchen Sie einmal mit dem folgenden Code, es wird helfen, sein

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "ServerProcess"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = JSP[0].ProcessName; //Process 
RAM_memorysize = PC.NextValue();   //float RAM_memorysize; 
PC.Close(); 
PC.Dispose(); 
Verwandte Themen