DA0005: Häufige GC2-Auflistung
Regel-ID |
DA0005 |
Kategorie |
.NET Framework-Verwendung |
Profilerstellungsmethode |
.NET-Arbeitsspeicher |
Nachricht |
Viele der .NET-Objekte werden in der Garbage Collection der Generation 2 gesammelt. |
Meldungstyp |
Warnung |
Ursache
Bei der Garbage Collection der zweiten Generation wird eine hohe Anzahl von .NET-Speicherobjekten freigegeben.
Regelbeschreibung
Die Microsoft .NET-CLR (Common Language Runtime) verfügt über einen automatischen Speicherverwaltungsmechanismus, durch den der Speicher von Objekten, die von der Anwendung nicht mehr verwendet werden, mithilfe eines Garbage Collectors freigegeben wird. Der Garbage Collector ist generationsorientiert, da angenommen wird, dass viele Speicherbelegungen kurzlebig sind. Lokale Variablen müssen beispielsweise kurzlebig sein. Neu erstellte Objekte beginnen in Generation 0 (gen 0) und werden zu Generation 1, wenn sie nach einer Ausführung der Garbage Collection noch vorhanden sind, und schließlich zu Generation 2, wenn sie von der Anwendung auch weiterhin verwendet werden.
Objekte in der Generation 0 werden häufig und i. d. R. äußerst effizient gesammelt. Objekte in der Generation 1 werden nicht so häufig und weniger effizient gesammelt. Und langlebige Objekte in der Generation 2 werden schließlich noch seltener gesammelt. Die Collection der Generation 2, bei der es sich um eine vollständige Ausführung der Garbage Collection handelt, ist zudem der aufwändigste Vorgang.
Diese Regel wird ausgelöst, wenn anteilsmäßig zu viele Garbage Collections der Generation 2 aufgetreten sind. Sind nach der Collection der Generation 1 zu viele relativ kurzlebige Objekte vorhanden, die dann aber im Rahmen einer vollständigen Collection der Generation 2 gesammelt werden können, wird der Aufwand für die Speicherverwaltung unter Umständen leicht zu groß. Weitere Informationen finden Sie auf der MSDN-Website im Beitrag Mid-life crisis von "Rico Mariani's Performance Tidbits".
Vorgehensweise bei der Überprüfung einer Warnung
In den .NET-Arbeitsspeicherdatenansichten der Profilerstellungstools finden Sie Informationen zum Speicherbelegungsmuster der Anwendung. Ermitteln Sie mithilfe der Objektlebensdaueransicht, welche von den Datenobjekten des Programms bei der Generierung 2 noch vorhanden sind und von dort aus freigegeben werden. Ermitteln Sie mithilfe der .NET-Speicherbelegungsansicht den Ausführungspfad, der zu diesen Speicherbelegungen geführt hat.
Informationen zum Verbessern der Garbage Collection-Leistung finden Sie auf der Microsoft-Website unter Garbage Collector-Grundlagen und Tipps zur Leistung. Informationen zum Mehraufwand der automatischen Garbage Collection finden Sie unter Großer Objektheap im Detail.