Benutzer mit den meisten Antworten
Ermitteln der aktuellen Hauptspeicherbelegung

Frage
-
Hallo Forum,
wie kann ich die aktuelle Hauptspeicherbelegung meiner Anwendung ermitteln?
Es wäre auch interessant, wie groß meine Anwendung ist. Dann könnte mittels Subtraktion die var. Belegung durch Daten ermittelt werden.
Besten Dank vorab!
Ciao, Alberto
Antworten
-
Hallo Alberto
die Process Klasse liefert einige Werte, siehe MSDN und Code wie:
long pms = System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64;
oder GC-Heaps
System.GC.GetTotalMemory
Beachte, der Speicher unter .NET ist sehr dynamisch-virtuell, die "Grösse deiner App" kann man uva wegen dem Runtime-Speicherbedarf und dem Umsetzen in JIT-Code schwer einschätzen.
Es gibt natürlich Wege, etliche solche Werte abzufragen, aber es sind meist (Profiling/PerfCounter...) APIs die man zu Laufzeit/Release nicht alle nutzen kann/sollte.- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 11:14
-
Hallo Alberto,
es wird zwar gern einmal PrivateMemorySize64 und WorkingSet64 für derartige Zwecke benutzt, aber es gibt da u.a. ein Flush Verhalten und es wird zum Teil DebugDiag bevorzugt.
[Does PrivateMemorySize64 and WorkingSet64 flush memory?]
http://social.msdn.microsoft.com/Forums/en/clr/thread/c75f819f-9512-421c-ab89-bff417af13d7[How to Use the Debug Diagnostic Tool v1.1 (DebugDiag) to Debug User Mode Processes]
http://msdn.microsoft.com/de-de/library/ff420662.aspx[Download details: Debug Diagnostic Tool v1.1]
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3[Debug Diag script for troubleshooting .NET 2.0 Memory leaks - If broken it is, fix it you should - Site Home - MSDN Blogs]
http://blogs.msdn.com/b/tess/archive/2009/05/12/debug-diag-script-for-troubleshooting-net-2-0-memory-leaks.aspx
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 11:14
-
Hallo Alberto,
> wie kann ich die aktuelle Hauptspeicherbelegung meiner Anwendung ermitteln?
> Es wäre auch interessant, wie groß meine Anwendung ist. Dann könnte mittels Subtraktion die var. Belegung durch Daten ermittelt werden.Lade Dir doch den CLRProfiler herunter, mach ein paar Dumps und sieh Dir dann an, wie Alloziierung und Garbage Collection in .NET wirklich funktionieren. Seeing is believing. Lies unbedingt auch das Begleitdokument das mit dem CLRProfiler kommt. Nachdem Du verstanden hast, was es gibt, und wie es funktioniert, kannst Du aus dem unten angeführten Link die gewünschten Methoden auswählen.
Process-Member:
http://msdn.microsoft.com/de-de/library/system.diagnostics.process_members.aspxEbenfalls empfehlenswert: Mark Russinovichs VMMap (hat eine Hilfsdatei :-)
http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx
Gruß
Marcel- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 11:14
Alle Antworten
-
Hallo Alberto
die Process Klasse liefert einige Werte, siehe MSDN und Code wie:
long pms = System.Diagnostics.Process.GetCurrentProcess().PrivateMemorySize64;
oder GC-Heaps
System.GC.GetTotalMemory
Beachte, der Speicher unter .NET ist sehr dynamisch-virtuell, die "Grösse deiner App" kann man uva wegen dem Runtime-Speicherbedarf und dem Umsetzen in JIT-Code schwer einschätzen.
Es gibt natürlich Wege, etliche solche Werte abzufragen, aber es sind meist (Profiling/PerfCounter...) APIs die man zu Laufzeit/Release nicht alle nutzen kann/sollte.- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 11:14
-
Hallo Alberto,
es wird zwar gern einmal PrivateMemorySize64 und WorkingSet64 für derartige Zwecke benutzt, aber es gibt da u.a. ein Flush Verhalten und es wird zum Teil DebugDiag bevorzugt.
[Does PrivateMemorySize64 and WorkingSet64 flush memory?]
http://social.msdn.microsoft.com/Forums/en/clr/thread/c75f819f-9512-421c-ab89-bff417af13d7[How to Use the Debug Diagnostic Tool v1.1 (DebugDiag) to Debug User Mode Processes]
http://msdn.microsoft.com/de-de/library/ff420662.aspx[Download details: Debug Diagnostic Tool v1.1]
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3[Debug Diag script for troubleshooting .NET 2.0 Memory leaks - If broken it is, fix it you should - Site Home - MSDN Blogs]
http://blogs.msdn.com/b/tess/archive/2009/05/12/debug-diag-script-for-troubleshooting-net-2-0-memory-leaks.aspx
ciao Frank- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 11:14
-
Hallo Alberto,
> wie kann ich die aktuelle Hauptspeicherbelegung meiner Anwendung ermitteln?
> Es wäre auch interessant, wie groß meine Anwendung ist. Dann könnte mittels Subtraktion die var. Belegung durch Daten ermittelt werden.Lade Dir doch den CLRProfiler herunter, mach ein paar Dumps und sieh Dir dann an, wie Alloziierung und Garbage Collection in .NET wirklich funktionieren. Seeing is believing. Lies unbedingt auch das Begleitdokument das mit dem CLRProfiler kommt. Nachdem Du verstanden hast, was es gibt, und wie es funktioniert, kannst Du aus dem unten angeführten Link die gewünschten Methoden auswählen.
Process-Member:
http://msdn.microsoft.com/de-de/library/system.diagnostics.process_members.aspxEbenfalls empfehlenswert: Mark Russinovichs VMMap (hat eine Hilfsdatei :-)
http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx
Gruß
Marcel- Als Antwort markiert Robert BreitenhoferModerator Freitag, 3. Dezember 2010 11:14