Análisis del uso de memoria mediante la herramienta de asignación de objetos de .NET
Puede ver la cantidad de memoria que usa la aplicación y qué rutas de acceso de código asignan más memoria mediante la herramienta de asignación de objetos de .NET.
Después de ejecutar la herramienta, puede observar las trayectorias de ejecución de las funciones en las que se asignan los 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 de asignación de objetos de .NET, consulte Caso práctico: Guía para principiantes para optimizar el código.
Configuración
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 la 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 perfilada. Si el rendimiento de la herramienta de seguimiento o la aplicación es lento, y si no necesita realizar 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 velocidad que desee. Este cambio ayuda a acelerar el rendimiento de la aplicación durante la recopilación y el análisis.
Para obtener más información sobre cómo hacer que la herramienta sea más eficaz, consulte Optimización de la configuración del generador de perfiles.
Descripción de los datos
En la siguiente vista gráfica, el gráfico superior muestra el número de objetos activos en 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 basura.
Puede filtrar los datos tabulares para mostrar la actividad solo para un intervalo de tiempo especificado seleccionando un intervalo de tiempo. Al hacerlo, la información que aparece en las pestañas se limita al intervalo de tiempo filtrado.
También puede acercar o alejar 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 Type es una lista de clases y estructuras que ocupan 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 ocupan memoria dentro de un tipo o función de asignación determinado. 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 mostrarlos, haga clic con el botón derecho en la columna Type o Allocations y, a continuación, seleccione las opciones Bytes y Average Size (Bytes) opciones 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 aparecen únicamente en la vista de asignación .
La columna Nombre del módulo muestra el módulo que contiene la función o el proceso al que se llama.
Todas estas columnas se pueden ordenar. Para las columnas Type y Module Name, 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:
- Un tipo de valor como entero
: una colección de tipos de valor como una matriz de enteros
: un tipo de referencia como cadena
- Una colección de tipo referencia como 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 función muestra el proceso o el nombre de la función que contiene objetos que asignan memoria. La pantalla se basa en el nivel del nodo que está inspeccionando.
- 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 Self (Asignaciones) y Self-Size (Bytes) muestran el número de objetos asignados y la cantidad de memoria que usa una sola función o tipo de asignación seleccionado.
- La columna Tamaño medio (bytes) muestra la misma información que en la vista Asignaciones. Esta columna está oculta de forma predeterminada.
- La columna Nombre del módulo muestra el módulo que contiene la función o el proceso al 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 que usted selecciona y resalta el camino donde hay más asignaciones, guiándole en su investigación.
- El botón Mostrar ruta de acceso activa muestra u oculta los símbolos de llama que indican qué nodos forman parte de la ruta de acceso activa.
Funciones
La vista Funciones muestra procesos, módulos y funciones que asignan memoria.
La información que aparece en la vista Funciones incluye:
La columna Nombre muestra los procesos como los nodos de nivel más alto. Los procesos subyacentes son módulos y los módulos subyacentes son 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 propio (bytes)
- tamaño medio (bytes)
Collection
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 GC Reason muestra el motivo de este evento de recolección de basura.
- 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 basura 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 Recogida muestra el número de objetos que recopiló el recolector de basura.
- 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 llamadasy Funciones contienen las opciones Mostrar solo mi código y Mostrar código nativo, así como 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 dentro del destino de análisis y puede incluir código que no sea 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, la tabla muestra solo los tipos que contienen esa cadena.