DA0024: Tiempo elevado de CPU de GCDA0023: High GC CPU time

Identificador de reglaRule Id DA0023DA0023
CategoríaCategory Uso de .NET Framework.NET Framework Usage
Método de generación de perfilesProfiling method TodasAll
MensajeMessage El % de tiempo del GC es bastante alto.% Time in GC is fairly high. Esta indicación de una cantidad excesiva de sobrecarga de la recolección de elementos no utilizados podría estar afectando a la capacidad de respuesta de la aplicación.This indication of excessive amount of garbage collection overhead could be impacting the responsiveness of your application. Puede recopilar datos de asignación de memoria de .NET e información de vigencia del objeto para entender el patrón de asignación de memoria que la aplicación utiliza mejor.You can gather .NET memory allocation data and object lifetime information to understand the pattern of memory allocation your application uses better.
Tipo de reglaRule type InformativaInformational

Al generar perfiles mediante los métodos de muestreo, memoria de .NET o contención de recursos, debe reunir al menos 10 ejemplos para activar esta regla.When you profile by using the sampling, .NET memory, or resource contention methods, you must collect at least 10 samples to trigger this rule.

MotivoCause

Los datos de rendimiento del sistema recopilados durante la generación de perfiles indican que la cantidad de tiempo que se invierte en la recolección de elementos no utilizados es considerable en comparación con el tiempo total de procesamiento de la aplicación.System performance data that is collected during profiling indicates that the amount of time that is spent in garbage collection is significant compared with the total application processing time.

Descripción de la reglaRule Description

El Common Language Run-time (CLR) de Microsoft .NET proporciona un mecanismo de administración de memoria automática que utiliza un recolector de elementos no utilizados para reclamar memoria de los objetos que la aplicación ya no utiliza.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. El recolector de elementos no utilizados está orientado a la generación, según la suposición de que muchas asignaciones son de corta duración.The garbage collector is generation-oriented, based on the assumption that many allocations are short-lived. Las variables locales, por ejemplo, deben ser de corta duración.Local variables, for example, should be short-lived. Los objetos recién creados comienzan en la generación 0 (gen 0), a continuación avanzan hacia la generación 1 cuando sobreviven a una ejecución de recopilación de elementos no utilizados y, finalmente, hacen una transición a la generación 2 si la aplicación todavía los utiliza.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.

Los objetos de la generación 0 se recopilan con frecuencia y, normalmente, de una manera muy eficaz.Objects in generation 0 are collected frequently and usually very efficiently. Los objetos de la generación 1 se recopilan con menos frecuencia y, normalmente, de una manera menos eficaz.Objects in generation 1 are collected less frequently and less efficiently. Por último, los objetos de larga duración de la generación 2 se deben recopilar incluso con menos frecuencia.Finally, long-lived objects in generation 2 should be collected even less frequently. La colección de la generación 2, que es una ejecución de recolección de elementos no utilizados completa, es también la operación más costosa.Generation 2 collection, which is a full garbage collection run, is also the most expensive operation.

Esta regla se desencadena cuando la cantidad de tiempo que se invierte en la recolección de elementos no utilizados es considerable en comparación con el tiempo total de procesamiento de la aplicación.This rule fires when the amount of time that is spent in garbage collection is significant compared with the total application processing time.

Nota

Cuando la proporción de tiempo que se invierte en la recolección de elementos no utilizados es excesiva en comparación con el tiempo total de procesamiento de la aplicación, la advertencia DA0024: Tiempo excesivo de CPU de GC se desencadena en lugar de esta regla.When the proportion of time that is spent in garbage collection is excessive compared with the total application processing time, the DA0024: Excessive GC CPU Time warning fires instead of this rule.

Cómo investigar una advertenciaHow to Investigate a Warning

Haga doble clic en el mensaje en la ventana Lista de errores para navegar a la vista Marcas de los datos de generación de perfiles.Double-click the message in the Errors List window to navigate to the Marks View of the profiling data. Busque la columna Memoria CLR de .NET\% de tiempo del GC.Find the .NET CLR Memory\% Time in GC column. Determine si hay fases concretas de ejecución del programa en que la sobrecarga de la recolección de elementos no utilizados de memoria administrada sea mayor que en otras.Determine if there are specific phases of program execution where the overhead of managed memory garbage collection is heavier than other phases. Compare los valores de % de tiempo del GC con la tasa de recolección de elementos no utilizados notificada en los valores N.º de colecciones de gen. 0, N.º de colecciones de gen. 1 y N.º de colecciones de gen. 2.Compare the values of the % Time in GC value to the rate of garbage collection reported in the # of Gen 0 Collections, # of Gen 1 Collections, # of Gen 2 Collections values.

El valor del % de tiempo del GC intenta notificar la cantidad de tiempo que una aplicación dedica a la recolección de elementos no utilizados proporcional a la cantidad total de procesamiento.The % Time in GC value tries to report the amount of time that an application spends performing garbage collection proportional to the total amount of processing. Tenga en cuenta que hay circunstancias en que el % de tiempo del GC puede notificar un valor muy alto, pero no es debido a una excesiva recolección de elementos no utilizados.Be aware that there are circumstances when the % Time in GC value can report a very high value, but it is not because of excessive garbage collection. Para obtener más información sobre la manera en que se calcula el valor del % de tiempo del GC, vea la entrada Diferencia entre los datos de rendimiento notificados por distintas herramientas – 4 del Weblog de Maoni en MSDN.For more information about the way the % Time in GC value is calculated, see the Difference Between Perf Data Reported by Different Tools - 4 entry of Maoni's Weblog on MSDN. Si se producen errores de página o la aplicación es adelantada por otro trabajo de mayor prioridad en el equipo durante la recolección de elementos no utilizados, el contador del % de tiempo del GC reflejará esos retrasos adicionales.If page faults are occurring or the application is preempted by other higher priority work on the machine during garbage collection, the % Time in GC counter will reflect those additional delays.