DA0022 : Taux élevé de garbage collection Gen 2DA0022: High rate of Gen 2 garbage collections

ID de règleRule Id DA0022DA0022
CategoryCategory Utilisation du .NET Framework.NET Framework Usage
Méthode de profilageProfiling method TousAll
MessageMessage Taux relativement élevé de garbage collection Gen 2.There is a fairly high rate of Gen 2 garbage collections occurring. Si, par conception, la plupart des structures de données de votre programme sont allouées et persistent pour longtemps, cela ne pose pas de problème.If, by design, most of your program's data structures are allocated and persisted for a long time, this is not ordinarily a problem. Cependant, si ce comportement est involontaire, votre application peut épingler des objets.However, if this behavior is unintended, your application may be pinning objects. Si vous n’êtes pas sûr, vous pouvez regrouper les données d’allocation de mémoire .NET et les informations de durée de vie des objets afin de comprendre le modèle d’allocation de mémoire utilisé par votre application.If you are not sure, you can gather .NET memory allocation data and object lifetime information to understand the pattern of memory allocation your application uses.
Type de règleRule type WarningWarning

Lorsque vous effectuez un profilage à l’aide de la méthode d’échantillonnage, de mémoire .NET ou de conflit des ressources, vous devez collecter au moins 10 échantillons pour déclencher cette règle.When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 10 samples to trigger this rule.

CauseCause

Les données relatives aux performances système qui ont été collectées pendant le profilage indiquent qu’une importante quantité de mémoire allouée aux objets .NET Framework a été récupérée dans la génération 2 du garbage collection, par rapport aux garbage collections de génération 0 et 1.System performance data that was collected during profiling indicate that a significant proportion of the memory for.NET Framework objects was reclaimed in generation 2 of garbage collection compared to generation 0 and generation 1 garbage collections.

Description de la règleRule Description

Le common language runtime (CLR) Microsoft .NET fournit un mécanisme de gestion automatique de la mémoire qui utilise un récupérateur de mémoire pour récupérer la mémoire des objets que l’application n’utilise plus.The Microsoft .NET common language run-time (CLR) provides an automatic memory management mechanism that uses a garbage collector to reclaim memory from objects that the application no longer uses. Le récupérateur de mémoire est orienté génération et repose sur l’hypothèse que de nombreuses allocations sont de courte durée.The garbage collector is generation-oriented, based on the assumption that many allocations are short-lived. Les variables locales, par exemple, doivent avoir une durée de vie courte.Local variables, for example, should be short-lived. Les objets récemment créés commencent à la génération 0 (gen 0), puis progressent jusqu’à la génération 1 lorsqu’ils survivent à l’exécution d’un garbage collection. Enfin, ils passent à la génération 2 si l’application les utilise toujours.Newly created objects start in generation 0 (gen 0), and then they progress to generation 1 when they survive a garbage collection run, and finally transition to generation 2 if the application still uses them.

Les objets de la génération 0 sont collectés fréquemment et généralement de manière très efficace.Objects in generation 0 are collected frequently and usually very efficiently. Les objets de la génération 1 sont collectés moins fréquemment et moins efficacement.Objects in generation 1 are collected less frequently and less efficiently. Enfin, les objets à longue durée de vie de la génération 2 doivent être collectés encore moins fréquemment.Finally, long-lived objects in generation 2 should be collected even less frequently. Le garbage collection de génération 2, qui correspond à un garbage collection complet, constitue l’option la plus coûteuse.Generation 2 collection, which is a full garbage collection run, is also the most expensive operation.

Cette règle est déclenchée lorsque, proportionnellement, un trop grand nombre de garbage collections de génération 2 se sont produits.This rule fires when proportionally too many generation 2 garbage collections are occurring. Les applications .NET Framework au comportement normal auront 5 fois plus de garbage collections de génération 1 que de garbage collections de génération 2Well-behaved .NET Framework applications will have more than 5 times as many generation 1 garbage collections as generation 2 collections. (un facteur 10x est probablement idéal).(A 10x factor is probably ideal.)

Comment rechercher la cause d’un avertissementHow to Investigate a Warning

Double-cliquez sur le message dans la fenêtre Liste d’erreurs pour accéder à la vue Marques des données de profilage.Double-click the message in the Errors List window to navigate to the Marks View of the profiling data. Accédez aux colonnes Mémoire CLR .NET\Nombre de collections de la génération 0 et Mémoire CLR .NET\Nombre de collections de la génération 1.Find the .NET CLR Memory\# of Gen 0 Collections and .NET CLR Memory\# of Gen 1 Collections columns. Déterminez s’il existe des phases spécifiques de l’exécution du programme durant lesquelles les garbage collections sont plus fréquents.Determine if there are specific phases of program execution where garbage collection is occurring more frequently. Comparez ces valeurs à celles de la colonne % temps dans le GC pour voir si le modèle des allocations de mémoire managée provoque une charge excessive de gestion de la mémoire.Compare these values to the % Time in GC column to see if the pattern of managed memory allocations is causing excessive memory management overhead.

Une proportion élevée de garbage collections de génération 2 ne constitue pas toujours un problème.A high proportion of Generation 2 garbage collections is not always a problem. Cela peut être dû à la conception.It might be by design. Cette règle peut être déclenchée lorsqu’une application alloue des structures de données volumineuses qui doivent rester actives pendant de longues périodes au cours de l’exécution.An application that allocates large data structures that must remain active for long periods during execution may trigger this rule. Lorsque la mémoire d’une telle application est sous pression, celle-ci peut être forcée d’effectuer des garbage collections fréquents.When such an application is under memory pressure, it may be forced to perform frequent garbage collections. Si les garbage collections de génération 0 et de génération 1, qui sont moins coûteux, ne peuvent récupérer qu’une petite quantité de la mémoire managée, des garbage collections de génération 2 plus fréquents seront planifiés.If the less expensive Generation 0 and Generation 1 garbage collections can reclaim only a small amount managed memory, more frequent Generation 2 garbage collections will be scheduled.

La vue Marques comprend d’autres colonnes Mémoire CLR .NET qui peuvent vous aider à identifier les problèmes de garbage collection.There are additional .NET CLR Memory columns in the Marks View that can help you identify garbage collection issues. La colonne % temps dans le GC vous permet d’évaluer le niveau de surcharge de la gestion de mémoire.The % Time in GC column helps you understand how much memory management overhead is occurring. Si, en général, votre application utilise peu d’objets volumineux et persistants, les fréquents garbage collections de génération 2 ne doivent pas consommer de quantités excessives du temps processeur.If your application typically uses a fairly small number of large but persistent objects, then frequent Generation 2 collections should not consume excessive amounts of CPU time. Si la mémoire de l’application est sous pression en raison d’un besoin accru en mémoire physique (RAM), les règles associées qui évaluent les valeurs de la colonne Mémoire\Pages/s peuvent également être déclenchées.If the application is under memory pressure because more Physical Memory (RAM) is required, related rules that evaluate the Memory\Pages/sec column values may also fire.

Pour comprendre la façon dont l’application utilise la mémoire managée, profilez-la de nouveau en exécutant un profil d’allocation de mémoire .NET et sélectionnez l’option de profilage Durée de vie des objets.To understand the application's pattern of managed memory usage, profile it again running a.NET Memory allocation profile and select the Object Lifetime profiling option.

Pour plus d’informations sur l’amélioration des performances du garbage collection, consultez Garbage Collector Basics and Performance Hints sur le site de Microsoft.For information about how to improve garbage collection performance, see Garbage Collector Basics and Performance Hints on the Microsoft Web site. Pour plus d’informations sur la surcharge du garbage collection automatique, consultez Le tas des objets volumineux dévoilé.For information about the overhead of automatic garbage collection, see Large Object Heap Uncovered.