Análisis del uso de memoria mediante la herramienta de asignación de objetos de .NET
Puede consultar la cantidad de memoria que usa la aplicación y las rutas de acceso al código que asignan la mayor parte de la memoria mediante la herramienta de asignación de objetos de .NET.
Tras ejecutar la herramienta, podrá ver las rutas de acceso de ejecución de función en las que se asignan objetos. A continuación, podrá hacer un seguimiento hasta la raíz del árbol de llamadas que más memoria consume.
Para ver un tutorial que muestra cómo mejorar el rendimiento mediante la herramienta Asignación de objetos de .NET, consulte Caso práctico: Guía para principiantes para optimizar el código.
Configurar
Seleccione Alt + F2 para abrir el Generador de perfiles de rendimiento en Visual Studio.
Active la casilla Seguimiento de asignación de objetos de .NET.
Seleccione el botón Iniciar para ejecutar la herramienta.
Si habilita la opción Iniciar con la recopilación en pausa antes de iniciar el generador de perfiles, los datos no se recopilarán hasta que seleccione el botón Grabar en la vista de sesión de diagnóstico.
Una vez que se inicie la ejecución de la herramienta, repase el escenario del que desea generar perfiles en su aplicación. A continuación, seleccione Detener recopilación o cierre la aplicación para ver los datos.
Seleccione la pestaña Asignación. Aparecen datos de asignación de memoria similares a los siguientes.
Ahora puede analizar la asignación de memoria de los objetos.
Durante la recopilación, la herramienta de seguimiento puede ralentizar la aplicación de la que se generan perfiles. Si el rendimiento de la herramienta de seguimiento o la aplicación es lento, y si no es necesario que realice un seguimiento de todos los objetos, puede ajustar la frecuencia de muestreo. Para ello, seleccione el símbolo de engranaje situado junto a la herramienta de seguimiento en la página de resumen del generador de perfiles.
Ajuste la frecuencia de muestreo a la que desee. Este cambio ayuda a acelerar el rendimiento de su aplicación durante la recopilación y el análisis.
Para obtener más información sobre cómo aumentar la eficacia de la herramienta, consulte el artículo sobre cómo optimizar la configuración del generador de perfiles.
Comprensión de los datos
En la vista gráfica siguiente, el gráfico superior muestra el número de objetos activos de la aplicación. El gráfico diferencial de objetos inferior muestra el cambio de porcentaje de los objetos de aplicación. Las barras rojas indican cuándo tuvo lugar la recolección de elementos no utilizados.
Puede filtrar los datos tabulares para mostrar la actividad solo de un intervalo de tiempo específico seleccionando un intervalo de tiempo. Al hacerlo, la información que aparece en las pestañas se limita al ámbito temporal filtrado.
También puede usar el zoom para ampliar o reducir el gráfico.
Asignación
La vista Asignación muestra la ubicación de los objetos que asignan memoria y la cantidad de memoria que asignan dichos objetos.
La siguiente información aparece en la vista Asignación:
La columna Tipo es una lista de clases y estructuras que consumen memoria. Haga doble clic en un tipo para ver su seguimiento regresivo como un árbol de llamadas invertido. Solo en la vista Asignación, puede ver los elementos de la categoría seleccionada que consumen memoria.
La columna Asignaciones muestra el número de objetos que consumen memoria dentro de una función o un tipo de asignación determinados. Esta columna solo aparece en las vistas Asignación, Árbol de llamadas y Funciones.
Las columnas Bytes y Tamaño medio (bytes) no aparecen de forma predeterminada. Para mostrarlas, haga clic con el botón derecho en la columna Tipo o Asignaciones y, después, seleccione las opciones Bytes y Tamaño medio (bytes) para agregarlas al gráfico.
Las dos columnas son similares a Total (asignaciones) y Propio (asignaciones) , excepto en que muestran la cantidad de memoria consumida en lugar del número de objetos que consumen memoria. Estas columnas solo aparecen en la vista Asignación.
En la columna Nombre del módulo, se muestra el módulo que contiene la función o el proceso que se llama.
Todas estas columnas se pueden ordenar. En el caso de las columnas Tipo y Nombre del módulo, puede ordenar los elementos alfabéticamente en orden ascendente o descendente. En el caso de Asignaciones, Bytes y Tamaño medio (bytes) , puede ordenar los elementos aumentando o reduciendo el valor numérico.
Símbolos
Los siguientes símbolos aparecen en las pestañas Asignación, Árbol de llamadas y Funciones:
: tipo de valor como un entero.
: colección de tipo de valor como una matriz de enteros.
: tipo de referencia como una cadena.
: colección de tipo de referencia como una matriz de cadenas.
Árbol de llamadas
La vista Árbol de llamadas muestra las rutas de acceso de ejecución de función que contienen objetos que asignan mucha memoria.
La siguiente información aparece en la vista Árbol de llamadas:
- La columna Nombre de la función muestra el proceso o nombre de la función que contiene objetos que asignan memoria. La presentación se basa en el nivel del nodo que inspecciona.
- Las columnas Total (asignaciones) y Tamaño total (bytes) muestran el número de objetos asignados y la cantidad de memoria que usa una función y todas las demás funciones a las que llama. La columna Tamaño total (bytes) está oculta de forma predeterminada.
- Las columnas Propio (asignaciones) y Tamaño automático (bytes) muestran el número de objetos asignados y la cantidad de memoria que usa una sola función o un solo tipo de asignación seleccionados.
- La columna Tamaño medio (bytes) muestra la misma información que en la vista Asignaciones. Esta columna está oculta de forma predeterminada.
- En la columna Nombre del módulo, se muestra el módulo que contiene la función o el proceso que se llama.
Entre las opciones adicionales que aparecen en la vista Árbol de llamadas se incluyen:
- El botón Expandir ruta de acceso activa resalta una ruta de ejecución de función que contiene muchos objetos que asignan memoria. El algoritmo comienza en un nodo seleccionado por usted y resalta la ruta de acceso de la mayoría de las asignaciones, lo que le guía en su investigación.
- El botón Mostrar ruta de acceso activa muestra u oculta los iconos de llama que indican qué nodos forman parte de la ruta de acceso activa.
Functions
La vista Funciones muestra los procesos, los módulos y las funciones que asignan memoria.
La información que aparece en la vista Funciones incluye:
En la columna Nombre se muestran los procesos como nodos de nivel superior. Debajo de los procesos están los módulos y, debajo de los módulos, están las funciones.
Las siguientes columnas, que muestran la misma información que en las vistas Asignación y Árbol de llamadas:
- Total (asignaciones)
- Propio (asignaciones)
- Tamaño total (bytes)
- Tamaño automático (bytes)
- Tamaño medio (bytes)
Colección
La vista de colección muestra cuántos objetos se han recopilado o conservado durante la recolección de elementos no utilizados.
La siguiente información aparece en la vista Colección.
- La columna GC muestra el identificador de esta recolección de elementos no utilizados en el ciclo de vida del ejecutable.
- La columna Generación muestra la generación de la recolección de elementos no utilizados.
- La columna Tipo de CG muestra el tipo de esta recolección de elementos no utilizados.
- La columna Razón de GC muestra la razón de este evento de recolección de elementos no utilizados.
- La columna Duración de la pausa muestra el tiempo que la ejecución estuvo bloqueada porque el recopilador de elementos no utilizados necesita el uso exclusivo del montón. Para una recolección de elementos no utilizados en segundo plano, este valor es pequeño.
- La columna Tamaño de LOH muestra el tamaño del montón de objetos grandes después de ejecutar el recolector de elementos no utilizados.
- La columna Tamaño de POH muestra el tamaño del montón de objetos anclados después de ejecutar el recolector de elementos no utilizados.
- La columna Surv finalizable (MB) muestra el número de MB de objetos que tienen finalizadores (destructores) que sobrevivieron a la recolección de elementos no utilizados.
- La columna Objetos anclados muestra el número de objetos anclados que promueve esta recolección de elementos no utilizados.
- La columna Recopilados muestra el número de objetos recopilados por el recolector de elementos no utilizados.
- La columna Restantes muestra el número de objetos que se conservaron tras la ejecución del recolector de elementos no utilizados.
Al seleccionar una fila, esta vista también muestra gráficos circulares para visualizar los objetos recogidos y supervivientes por tipo.
Herramientas de filtrado
Las vistas Asignaciones, Árbol de llamadas y Funciones contienen las opciones Mostrar solo mi código y Mostrar código nativo y un cuadro de filtro.
- Mostrar solo mi código contrae sistemas, plataformas y otros códigos que no son de usuario en plataformas de tipo [Código externo] para que pueda centrarse en su código solamente. Para obtener más información, vea Depurar solo código de usuario con Solo mi código.
- Mostrar código nativo muestra código nativo en el destino de análisis y puede incluir código que no es de usuario.
- Con el cuadro de filtro, puede filtrar la columna Nombre o Nombre de función según el valor proporcionado. Escriba un valor de cadena en el cuadro. A continuación, en la tabla solo se muestran los tipos que contienen esa cadena.