DA0024 : temps processeur GC excessif

ID de la règle

DA0024

Catégorie

Utilisation du .NET Framework

Méthode de profilage

Tous

Message

% de temps dans GC très élevé. Volume de surcharge de garbage collection trop élevé.

Type de règle

Avertissement

Lorsque vous profilez en utilisant les méthodes d'échantillonnage, de mémoire. NET ou de conflits de ressources, vous devez collecter au moins 10 échantillons pour déclencher cette règle.

Cause

Les données des performances système collectées pendant le profilage indiquent que le temps passé dans le garbage collection est excessivement élevé comparé au temps total de traitement de l'application.

Description de la règle

Le CLR (Common Language Runtime) 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 le temps passé dans le garbage collection est excessivement élevé comparé au temps total de traitement de l'application.

Notes

Lorsque la proportion de temps passé dans le garbage collection est significative mais pas excessive comparé au temps total de traitement de l'application, c'est l'avertissement DA0023 : temps processeur GC élevé qui se déclenche à la place de cette règle.

Comment examiner un avertissement

Double-cliquez sur le message dans la fenêtre Liste d'erreurs pour naviguer jusqu'à l'Marques, vue des données de profilage. Recherchez la colonne Mémoire CLR .NET\% Temps dans le GC. Déterminez s'il existe des phases spécifiques de l'exécution du programme où la surcharge de l'opération garbage collection de mémoire managée est plus importante que dans d'autres phases. Comparez les valeurs du compteur % Temps dans le GC au taux de garbage collection signalé dans les valeurs de Nombre de collections de la génération 0, Nombre de collections de la génération 1, Nombre de collections de la génération 2.

La valeur de % de temps dans le GC essaie de signaler le temps passé par une application à traiter le garbage collection proportionnellement au temps total de traitement. Gardez à l'esprit qu'il est possible dans certaines circonstances que le compteur % Temps dans le GC indique une valeur très élevée, mais ce n'est pas en raison d'une utilisation excessive de garbage collection. Pour plus d'informations sur le mode de calcul de la valeur de % de temps dans le GC, consultez l'entrée Différence entre les données de performance signalées par différents outils – 4 (page éventuellement en anglais) dans Maoni's Weblog sur le site MSDN. Si des erreurs se produisent sur des pages ou si l'application est préemptée sur l'ordinateur par autre travail à priorité élevée pendant le garbage collection, le compteur de % de temps dans le GC reflétera ces délais supplémentaires.