Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.

  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

Kapitel 7. Das Modell des verwalteten Sp... > Tipps für den verwalteten Heap

7.5. Tipps für den verwalteten Heap

Im Folgenden finden Sie Tipps für den Umgang mit dem verwalteten Heap. Einige dieser Tipps, etwa der Verzicht auf die GC.Collect-Methode, wurden bereits in diesem Kapitel erwähnt. Aus Gründen der Vollständigkeit werden sie jedoch hier noch einmal aufgelistet.

  • Programmieren Sie nicht im Widerspruch zu dem Garbage-Collection-Paradigma in der verwalteten Umgebung. Kleine Objekte sollten kurzlebig sein und größere Objekte langlebig. Bei Objekten wird erwartet, dass diese mit ähnlich großen Objekten kommunizieren.

  • Vermeiden Sie Boxing. Häufiges Boxing, wie es bei der Verwendung nicht generischer Auflistungen mit Wertetypen auftritt, überflutet Generation 0 mit kleinen Objekten. Dies führt zu zusätzlichen Garbage Collections.

  • Wegen des hohen Aufwands der Finalisierung sollten Sie die Finalize-Methode nur dann verwenden, wenn dies imperativ geschieht. Außerdem sind leere Destruktoren nicht harmlos, wie dies in C++ der Fall ist. Leere Destruktoren ziehen eine vollständige Finalisierung nach sich, was entsprechend aufwändig ist.

  • Klassen, die eine Finalize-Methode aufweisen, sollten keine tiefen Objektgraphen haben. Finalisierbare Objekte werden länger als normale Objekte im Speicher gehalten. Objekte, die von finalisierbaren Objekten referenziert sind, bleiben ebenso länger im Speicher.

  • Wenn möglich, sollten Sie nicht auf andere verwaltete Objekte in der Finalize-Methode verweisen. Denn zum Einen könnten diese Objekte nicht länger existieren. Zum Anderen könnten Sie ungewollt eine Rückreferenz erzeugen und damit das aktuelle Objekt wieder beleben. Wieder belebte Objekte können problematisch sein.

  • Definieren Sie Disposable-Objekte in der using-Anweisung, wodurch automatisch die Dispose-Methode aufgerufen wird, was eine Bereinigung sicherstellt.

  • Rufen Sie nicht GC.Collect auf. Dies gilt insbesondere für eine vollständige Garbage Collection, die aufwändig ist. Erlauben Sie, dass Garbage Collections auf regulärem Wege in Erscheinung treten.

  • Halten Sie kurzlebige Objekte tatsächlich nur kurz am Leben. Referenzieren Sie kurzlebige Objekte nicht aus langlebigen. Das bindet die Lebenszeit der beiden Objekte. Die Folge ist, dass beide dann im Grunde genommen zu langlebigen Objekten werden.

  • Setzen Sie Klassenmemberobjekte und lokale Objekte so früh wie möglich auf null. Dies erlaubt es, dass diese so früh wie möglich bereinigt werden.

  • Allozieren Sie Objekte nicht in Hash- oder Vergleichsmethoden. Beim Sortieren und Vergleichen können diese Methoden mehrfach in einer kurzen Zeitspanne aufgerufen werden. Wenn die Methoden Allokationen enthalten, kann dies zu einer beträchtlichen Speicherbelastung auf dem verwalteten Heap und zu zusätzlichen Garbage Collections führen.

  • Vermeiden Sie Objekte, die eine Größe von knapp 85 KByte umfassen. Als Objekte, die dem Status nach nur fast groß sind, werden diese Objekte zur Generation 2 migrieren. Fügen Sie solchen Objekten einen Puffer hinzu, um aus ihnen große Objekte zu machen. Auf diese Weise erreichen Sie, dass die Objekte unmittelbar auf dem großen Objektheap abgelegt werden, und vermeiden den Overhead, der bei dem Transport zu Generation 2 entsteht.

  • Halten Sie den Code in einer Finalize-Methode kurz. Alle Finalize-Methoden werden durch einen separaten Thread gespeist – den finalisierbaren Thread. Eine erweiterte Finalize-Methode hält einen Thread davon ab, andere Finalize-Methoden zu bedienen und die Referenz auf das dazugehörige Objekt freizugeben.


  

You are currently reading a PREVIEW of this book.

                                                                                                                    

Get instant access to over $1 million worth of books and videos.

  

Start a Free Trial


  
  • Safari Books Online
  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint