web-dev-qa-db-de.com

So ermitteln Sie den von einer Anwendung verwendeten Speicher

Mögliches Duplikat:
So erhalten Sie Speicher, der in C # verfügbar oder verwendet wird

Ich möchte den von meiner Anwendung verwendeten Speicher in der Statusleiste meiner Anwendung anzeigen. Ich suche ein Memoryleak - aber ich weiß nicht wo. Jetzt besteht meine Idee darin, den verwendeten Speicher in der Statusleiste zu visualisieren, damit ich ihn sehen kann, während ich mit der Anwendung arbeite, und das Teil zu finden, wo das Problem auftritt, und dies dann zu profilieren.

Kann mir jemand etwas helfen, wie kann ich den benutzten Speicher bekommen.

27
BennoDual

Sie können die folgende Funktion verwenden (der Parameter true weist den GC an, zuerst eine Erfassung durchzuführen):

long memory = GC.GetTotalMemory(true);
36
geniaz1

Du kannst es versuchen GC.GetTotalMemory:

Ruft die Anzahl der Bytes ab, von denen derzeit angenommen wird, dass sie zugewiesen sind. Ein Parameter gibt an, ob diese Methode vor der Rückkehr ein kurzes Intervall> warten kann, damit das System> Objekte sammeln und finalisieren kann.


oder

using System.Diagnostics;

Process currentProc = Process.GetCurrentProcess();

Sobald Sie einen Verweis auf den aktuellen Prozess haben, können Sie dessen Speichernutzung durch Lesen der PrivateMemorySize64-Eigenschaft ermitteln.

long memoryUsed = currentProc.PrivateMemorySize64;
13
Rahul Ranjan

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

Wenn Sie diese Informationen jedoch in Ihre Anwendung einfügen müssen, können Sie weiterhin Leistungsindikatoren verwenden. .NET verfügt über Klassen im System.Diagnostics-Namespace, um auf deren Daten zuzugreifen. Siehe dieses Beispiel: https://weblog.west-wind.com/posts/2014/Sep/27/Capturing-Performance-Counter-Data-for-a-Process-by-Process-Id

4
Fabio