größe einer instanz im speicher feststellen

14/01/2009 - 05:13 von Martin | Report spam
hallo!

wegen verschiedener formfactoren möchte ich die größe einer 'urinstanz'
einer classe mit mehreren, großen statischen arrays & ReadOnlyCollections
feststellen.
làßt sich sowas einfacher machen, als die auszurechnen?

gruß Martin

oop? mmh!
 

Lesen sie die antworten

#1 Frank Dzaebel
14/01/2009 - 07:44 | Warnen spam
Hallo Martin,

wegen verschiedener formfactoren möchte ich die größe einer
'urinstanz' einer classe mit mehreren, großen statischen arrays &
ReadOnlyCollections feststellen.
làßt sich sowas einfacher machen, als die auszurechnen?



Also zunàchst prinizipiell musst Du Dir erstmal
klarmachen, dass es sich bei managed Objekten
um Objektbàume/Graph handelt. Unterschiedliche
Instanzen verweisen dabei ggf. auf gleiche
Unterinstanzen, verschiedenste Optimierungen können
zum Tragen kommen, sodass man eigentlich erstmal
angeben müsste, *was* genau man dann als
Ergebnis haben möchte.

Es gibt (also) keine explizite managed Methode,
die die managed Größe eines Objektes im Speicher
widerspiegelt.
Trotzdem ein paar Methoden, mit denen man
an diese Größe etwas herankommen kann:

_____________________

[GC.GetTotalMemory-Methode (System)]
http://msdn.microsoft.com/de-de/lib...emory.aspx

Also "GC.GetTotalMemory(true)" vor und nach Erzeugung des Objektes
aufrufen, und dann die Differenz bewerten.
_____________________

[Marshal.SizeOf-Methode (Object) (System.Runtime.InteropServices)]
http://msdn.microsoft.com/de-de/lib...bkfb3.aspx

Das wàre die unmanaged Größe im Speicher.
_____________________

[Download details: CLR Profiler for the .NET Framework 2.0]
http://www.microsoft.com/downloads/...x?familyid£62781c-3870-43be-8926-862b40aa0cd0&displaylang=en

Diese APIs bieten auch Möglichkeiten, bzw. wenn VSTS vorhanden ist,
die dortigen Analyse-Tools.
_____________________

[BinaryFormatter-Klasse (System.Runtime.Serialization.Formatters.Binary)]
http://msdn.microsoft.com/de-de/lib...atter.aspx

[Eliyahu Baker : Object Tree Size]
http://www.dotnetjunkies.com/WebLog...17084.aspx

Damit serialisiert man den Objekt-Graphen in einen MemoryStream
und schaut, welche Grösse er hat.
_____________________


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen