Bestimmen Sie, wie viel Speicher eine Klasse verwendet?
Frage
Ich versuche, zur Laufzeit festzustellen, wie viel Speicher eine bestimmte Klasse in .NET verwendet.Benutzen Marshal.SizeOf()
ist out, da es nur für Werttypen funktioniert.Gibt es eine Möglichkeit, genau zu überprüfen, wie viel Speicher eine Klasse verbraucht?
Lösung
Ich habe erst vor Kurzem damit begonnen, mich mit solchen Dingen zu befassen, aber ich habe herausgefunden, dass Speicherprofiler sehr detaillierte Informationen zu Instanzen von Objekten in Ihrer Anwendung liefern können.
Hier sind ein paar, die einen Versuch wert sind:
Andere Tipps
Ich stimme zu, dass ein Speicherprofiler der einfachste Weg ist, an die gesuchten Informationen zu gelangen.Zusätzlich zu den beiden zuvor genannten empfehle ich JetBrains dotTrace, das sowohl ein Leistungsprofiler als auch ein Speicherprofiler ist.
Wenn Sie es selbst tun möchten und bereit sind, tief in die Eingeweide der CLR einzudringen, können Sie die verwenden .NET-Profiling-API, eine nicht verwaltete API, die (wie Microsoft sagt):"Ermöglicht es einem Profiler, die Ausführung eines Programms durch die gemeinsame Sprachlaufzeit (CLR) zu überwachen." Es ist nicht gerade für den ungezwungenen Gebrauch gedacht, aber es hat eine enorme Menge an Funktionalität.
Verlinken Sie einfach auf die verwandte SO-Frage: