DA0024: Tiempo elevado de CPU de GC
Identificador de regla |
DA0023 |
Categoría |
Uso de .NET Framework |
Método de generación de perfiles |
Todos |
Mensaje |
El porcentaje de tiempo de GC es relativamente alto. Esta indicación de carga excesiva de recolección de elementos no utilizados podría estar afectando a la capacidad de respuesta de la aplicación. Puede recopilar datos de asignación de memoria de .NET e información de la duración de los objetos para entender el modelo de asignación de memoria que su aplicación utiliza mejor. |
Tipo de regla |
Informativa |
Cuando genere perfiles usando métodos de muestreo, memoria de .NET o contención de recursos, debe recopilar al menos 10 muestras para desencadenar esta regla.
Causa
Los datos de rendimiento del sistema recopilados durante la generación de perfiles indican que la cantidad de tiempo dedicada a la recolección de elementos no utilizados es considerable en comparación al tiempo de procesamiento total de la aplicación.
Descripción de la regla
Common Language Runtime (CLR) de Microsoft .NET proporciona un mecanismo de administración automática de la memoria que usa un recolector de elementos no utilizados para reclamar la memoria de los objetos que la aplicación ya no utiliza. El recolector de elementos no utilizados está orientado a la generación y se basa en la suposición de que muchas asignaciones son de corta duración. Las variables locales, por ejemplo, deben ser de corta duración. Los objetos recién creados comienzan en la generación 0 (gen 0), progresan a la generación 1 cuando sobreviven a una ejecución de la recolección de elementos no utilizados y, finalmente, pasan a la generación 2 si la aplicación todavía los usa.
Los objetos de la generación 0 se recopilan con frecuencia y, normalmente, de manera muy eficiente. Los objetos de la generación 1 se recopilan con menos frecuencia y de manera menos eficiente. Por último, los objetos de larga duración de la generación 2 se deben recopilar con menos frecuencia. La recolección de generación 2, que es una ejecución completa de la recolección de elementos no utilizados, es también la operación más costosa.
Esta regla se desencadena cuando la cantidad de tiempo que se dedica a la recolección de elementos no utilizados es considerable en comparación al tiempo total de procesamiento de la aplicación.
Nota
Cuando la proporción de tiempo que se dedica a la recolección de elementos no utilizados es excesiva en comparación con el tiempo total de procesamiento de la aplicación, se desencadena la advertencia DA0024: Tiempo excesivo de CPU de GC en lugar de esta regla.
Cómo investigar una advertencia
Haga doble clic en el mensaje en la ventana Lista de errores para navegar a Vista Marcas de los datos de generación de perfiles. Busque la columna Memoria de .NET CLR\% de tiempo del GC. Determine si hay fases concretas de ejecución de programas en las que la sobrecarga de recolección de elementos no utilizados de la memoria administrada sea mayor que en otras. Compare los valores de % de tiempo del GC con la tasa de recolección de elementos no utilizados indicada en los valores Número de colecciones de gen. 0, Número de colecciones de gen. 1 y Número de colecciones de gen. 2.
El valor % de tiempo del GC intenta indicar la cantidad de tiempo que una aplicación dedica a la recolección de elementos no utilizados en proporción a la cantidad total de procesamiento. Tenga en cuenta que hay circunstancias en que el valor % de tiempo del GC puede indicar un valor muy alto, pero eso no es debido a una excesiva recolección de elementos no utilizados. Para obtener más información sobre la manera de calcular el valor % de tiempo del GC, vea la entrada Difference Between Perf Data Reported by Different Tools – 4 de Maoni's Weblog en MSDN. Si se producen errores de página o la aplicación es adelantada por otro trabajo de prioridad más alta en el equipo durante la recolección de elementos no utilizados, el contador % de tiempo del GC reflejará esos retrasos adicionales.