DA0005 : Collections GC2 fréquentes
Id de la règle |
DA0005 |
Catégorie |
Utilisation du .NET Framework |
Méthode de profilage |
Mémoire .NET |
Message |
De nombreux objets sont collectés dans un garbage collection gen2. |
Type de message |
Avertissement |
Cause
Un nombre élevé d'objets mémoire .NET est libéré dans le garbage collection de 2e génération.
Description de la règle
Le CLR Microsoft .NET offre un mécanisme de gestion automatique de la mémoire qui utilise un garbage collector pour libérer la mémoire des objets que l'application n'utilise plus.Le garbage collector est orienté génération, basé sur l'hypothèse que de nombreuses allocations ont une courte durée de vie.Les variables locales, par exemple, doivent avoir une courte durée de vie.Les objets nouvellement créés commencent à la génération 0 (gen 0),puis progressent jusqu'à la génération 1 lorsqu'ils survivent à une exécution de garbage collection et effectuent enfin une transition vers la génération 2 si l'application les utilise encore.
Les objets de la génération 0 sont collectés fréquemment et généralement de façon très efficace.Les objets de la génération 1 sont collectés moins fréquemment et de façon moins efficace.Enfin, les objets à longue durée de vie dans la génération 2 doivent être collectés moins fréquemment encore.La collection de génération 2, qui est une exécution de garbage collection complet, est également l'opération la plus coûteuse.
Cette règle se déclenche lorsque proportionnellement trop de garbage collections de génération 2 se sont produits.Si trop d'objets relativement éphémères subsistent de la collection de génération 1 mais sont ensuite capables d'être collectés dans une collection complète de génération 2, le coût de gestion de la mémoire peut facilement devenir excessif.Pour plus d'informations, consultez la publication Crise de la cinquantaine (page éventuellement en anglais) dans Rico Mariani's Performance Tidbits sur le site Web MSDN.
Comment examiner un avertissement
Examinez les rapports Vues de données de mémoire .NET des outils de profilage pour comprendre le modèle d'allocation de mémoire de l'application.Utilisez l'Mode Durée de vie de l'objet pour déterminer quels sont les objets de données du programme qui survivent dans la génération 2 et qui sont ensuite récupérés.Utilisez l'Mode Allocations de mémoire .NET pour déterminer le chemin d'exécution ayant entraîné ces allocations.
Pour plus d'informations sur l'amélioration des performances d'une opération garbage collection, consultez Garbage Collector Basics and Performance Hints (page éventuellement en anglais) sur le site Web Microsoft.Pour plus d'informations sur la surcharge d'une opération garbage collection automatique, consultez Le tas des objets volumineux dévoilé.