Interessanter Artikel über:
Garbage Collection Automatic Memory Management in the Microsoft .NET Framework
Zusammenfassung:
- GC nimmt dem Entwickler gesamte Speichermanagement ab
- Bei Prozess Start wird von der Runtime ein zusammenhängender Speicher (Managed Heap) reserviert
-NextObjPtr zeigt auf den nächsten freien Speicherbereich im Managed Head
- Wird ein Objekt erzeugt wird einfach das Objekt im Managed Head abgelegt und zum NextObjPtr die Grösse des Objekts dazugezählt
- Sehr schnell diese Speicherzuweisung (Memory allocation), sogar schneller als C Speicherzuweisung
- Aber das beruht auf Annahme dass Speicher unendlich ist
- Daher, wenn Speicher voll ist, wird Speicher vom GC (Garbage Collector) aufgeräumt; Das braucht Zeit --> Performance leidet
- Der GC haut alle Objekte raus auf die keine Referenz mehr existiert und packt die restliche Objekte im Managed Heap zusammen Danach wird der NextObjPtr wieder richtig gesetzt
- Es gibt die Finalize Methode die von einem Objekt implementiert werden kann, wenn Dinge erledigt werden müssen, die beim Entfernen des Objekts aus dem Speicher gemacht wird
protected override void Finalize()
{
}
- Destruktor Methode wird mit Welle und Objektnamen angegeben; Diese Methode wird beim Zerstören des Objekts aufgerufen, und ersetzt eigentlich die Finalize Methode
~TestObject()
{
}
- Finalize sollte nicht verwendet werden
- Es gibt eine Finalization Queue, die dazu dient Object Pointer zu halten die eine Finalization Methode haben
- Es gibt eine F-Reachable Queue (Freachable), die dazu dient Object Pointer zu halten deren Finalization Methode aufgerufen werden sollte
- Special Runtime Thread ruft Finalization Methode der Objekte in der F-Reachable Queue auf
- Close oder Dispose Methode sind Standard für die Durchführung eines händischen Aufräumens (Clean Ups), und diese sollten implementiert werden
- SuppressFinalize(object obj) bewirkt dass der GC die Finalize Methode des Objekts obj nicht aufruft
Garbage Collector Artikel Zusammenfassung in Deutsch
Labels: .NET
Latest Posts
Popular Posts
-
I am *very* keen on automating tests, so I was looking into unit testing a WCF service. If I say "unit test", I mean a fast ,...
-
It's easy I thought, just select the Property of the EntityType and set the Default Value in the Properties window to: DateTime.Now ...
-
*Updated* 26. September 2010: Updated with comments from Adam Cogan *Updated* 27. September 2010: Updated the comparison between anonymo...
No comments:
Post a Comment