DA0021: Alta frecuencia de recolección de elementos no utilizados de gen 1DA0021: High rate of Gen 1 garbage collections

Identificador de reglaRule Id DA0021DA0021
CategoríaCategory Uso de .NET Framework.NET Framework Usage
Métodos de generación de perfilesProfiling methods TodasAll
MensajeMessage Se está produciendo una frecuencia relativamente alta de recolección de elementos no utilizados de gen 1.There is a fairly high rate of Gen 1 garbage collections occurring. Si, por diseño, la mayoría de las estructuras de datos del programa se asignan y se conservan durante mucho tiempo, esto no es normalmente un problema.If, by design, most of your program's data structures are allocated and persisted for a long time, this is not ordinarily a problem. Sin embargo, si este comportamiento no es intencionado, su aplicación puede estar anclando objetos.However, if this behavior is unintended, your application may be pinning objects. Si no está seguro, puede recopilar datos de asignación de memoria de .NET e información de duración de objetos para entender el patrón de asignación de memoria que la aplicación utiliza.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.
Tipo de reglaRule type InformaciónInformation

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 se recuperó una proporción considerable de la memoria para los objetos de .NET Framework en la generación 1 de recolección de elementos no utilizados en comparación con la generación 0 de colección de datos.System performance data that was collected during profiling indicate that a significant proportion of the memory for.NET Framework objects was reclaimed in generation 1 of garbage collection compared to generation 0 data collection.

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 se ha producido proporcionalmente demasiada recolección de elementos no utilizados de la generación 1.This rule fires when proportionally too many generation 1 garbage collections have occurred. Si hay demasiados objetos de relativamente corta duración que sobreviven a la colección de la generación 0, pero después pueden recopilarse en una colección de la generación 1, el coste de administración de memoria puede ser excesivo.If too many fairly short-lived objects survive generation 0 collection but are then able to be collected in a generation 1 collection, the cost of memory management can become excessive. Para obtener más información, consulte la publicación Crisis de vida media en los alicientes de rendimiento de Rico Mariani en el sitio web de MSDN.For more information, see the Mid-life crisis post on the Rico Mariani's Performance Tidbits on the MSDN Web site.

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 las columnas Memoria CLR de .NET\N.º de colecciones de gen. 0 y Memoria CLR de .NET\N.º de colecciones de gen. 1.Find the .NET CLR Memory\# of Gen 0 Collections and .NET CLR Memory\# of Gen 1 Collections columns. Determine si hay fases concretas de ejecución del programa en que la recolección de datos no utilizados se produzca con mayor frecuencia.Determine if there are specific phases of program execution where garbage collection is occurring more frequently. Compare estos valores con la columna % de tiempo del GC para ver si el patrón de las asignaciones de memoria administrada está provocando una sobrecarga de administración de memoria excesiva.Compare these values to the % Time in GC column to see if the pattern of managed memory allocations is causing excessive memory management overhead.

Para entender el patrón de uso de memoria administrada de la aplicación, vuelva a generar perfiles de la aplicación mediante una ejecución de generación de perfiles de asignación de memoria de .NET y solicite mediciones de duración de objetos.To understand the application's pattern of managed memory usage, profile it again running a.NET Memory allocation profile and request Object Lifetime measurements.

Para obtener información sobre cómo mejorar el rendimiento de la recolección de elementos no utilizados, consulte Aspectos básicos e indicaciones de rendimiento del recolector de elementos no utilizados en el sitio web de MSDN.For information about how to improve garbage collection performance, see Garbage Collector Basics and Performance Hints on the Microsoft Web site. Para obtener información sobre la sobrecarga de recolección de elementos no utilizados automática, consulte Montón de objeto grande al descubierto.For information about the overhead of automatic garbage collection, see Large Object Heap Uncovered.