2012-12-25 13 views
21

Mögliche Duplizieren:
How to get memory available or used in C#Wie die Größe des Speichers von einer Anwendung verwendet bekommen

Ich mag die Erinnerung sichtbar zu machen, die durch meine Anwendung in der Statusbar meiner Anwendung verwendet wird, . Ich suche nach einem Erinnerungsleck - aber ich weiß nicht wo. Nun, meine Idee ist es, das verwendete Gedächtnis in der Statusleiste zu visualisieren, so dass ich es sehen kann, während ich mit der Anwendung arbeite und den Teil finde, wo das Problem auftritt, und dann kann ich das profilieren.

Kann mir jemand Hilfe geben, wie bekomme ich den benutzten Speicher?

Antwort

22

Sie können die folgende Funktion verwenden (Der wahre Parameter teilt den GC eine Sammlung auszuführen zuerst):

long memory = GC.GetTotalMemory(true); 
+0

Wie im Duplikat erwähnt, Vorsicht: Diese Lösung betrachtet nur den verwalteten Heap. Um die vollständige Prozessgröße zu erhalten, siehe: https://stackoverflow.com/a/750595/331281 – Dejan

-1

Warum überwacht nicht nur die Speichernutzung mit dem Taskmanager oder mit erweiterten Tool von Sysinternals und nur Nachdem Sie festgestellt haben, welcher Arbeitsablauf die Speicherauslastung abnormal erhöht, können Sie die Anwendung mit CLR Profiler oder anderen Profilen profilieren.

8

Sie können GC.GetTotalMemory versuchen:

Es Ruft die Anzahl von Bytes zur Zeit zugewiesen gedacht werden. Ein Parameter gibt an, ob diese Methode vor der Rückgabe ein kurzes Intervall> warten kann, damit das System Müll sammeln und> Objekte abschließen kann.


oder

using System.Diagnostics; 

Process currentProc = Process.GetCurrentProcess(); 

Sobald Sie einen Verweis auf den aktuellen Prozess haben, können Sie die Speichernutzung bestimmen, indem die PrivateMemorySize64 Eigenschaft zu lesen.

+1

Sind sie gleich? – mcmillab

2

Wenn Sie den von Ihrer Anwendung verwendeten Speicher überwachen möchten, müssen Sie keinen Code dafür schreiben. Verwenden Sie einfach die Leistungsindikatoren von Windows (http://www.codeproject.com/Articles/8590/An-Introduction-To-Performance-Counters). Sie werden die benötigten Informationen mit Diagrammen zur Verfügung stellen! Es gibt viele Speicherzähler (http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx), einer von ihnen wird die Daten haben, die Sie brauchen, und ich denke, es wird Ihnen helfen, herauszufinden, wenn Ihre App beginnt, mehr Speicher zu verwenden, als es sollte.

Wenn Sie diese Informationen jedoch in Ihre Anwendung eingeben müssen, können Sie weiterhin Leistungsindikatoren verwenden. .NET verfügt über Klassen im System.Diagnostics-Namespace für den Zugriff auf ihre Daten. Siehe dieses Beispiel: http://www.geekpedia.com/tutorial211_Using-Performance-Counters-in-Csharp.html

Verwandte Themen