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 de asignación de objetos de .NET, consulte la Guía para principiantes para optimizar el código.

Configurar

  1. Seleccione Alt + F2 para abrir el Generador de perfiles de rendimiento en Visual Studio.

  2. Active la casilla Seguimiento de asignación de objetos de .NET.

    Captura de pantalla de la herramienta de Seguimiento de asignación de objetos de .NET seleccionada.

    Captura de pantalla de la herramienta de Seguimiento de asignación de objetos de .NET seleccionada.

  3. 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.

  4. 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.

    Captura de pantalla de ventana que muestra Detener recopilación.

    Captura de pantalla de ventana que muestra Detener recopilación.

  5. Seleccione la pestaña Asignación. Aparecen datos de asignación de memoria similares a los siguientes.

    Captura de pantalla de la pestaña Asignación.

    Captura de pantalla de la pestaña Asignación.

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.

Captura de pantalla de la configuración de la herramienta de asignación de .NET

Captura de pantalla de la configuración de la herramienta de asignación de .NET

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.

Captura de pantalla de la frecuencia de muestreo ajustada

Captura de pantalla de la frecuencia de muestreo ajustada

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.

Captura de pantalla de gráfico de la herramienta de asignación de .NET

Captura de pantalla de gráfico de la herramienta de asignación de .NET

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.

Captura de pantalla de gráfico filtrado del tiempo de asignación de .NET

Captura de pantalla de gráfico filtrado del tiempo de asignación de .NET

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.

Captura de pantalla de la vista Asignación ampliada.

Captura de pantalla de la vista Asignación ampliada.

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:

  • Símbolo de tipo de valor: tipo de valor como un entero.

  • Símbolo de colección de tipo de valor: colección de tipo de valor como una matriz de enteros.

  • Símbolo de tipo de referencia: tipo de referencia como una cadena.

  • Símbolo de colección de tipo de referencia: 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.

Captura de pantalla de la vista del árbol de llamadas.

Captura de pantalla de la vista del árbol de llamadas.

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.

Captura de pantalla de la ruta de acceso expandida.

Captura de pantalla de la ruta de acceso expandida.

Functions

La vista Funciones muestra los procesos, los módulos y las funciones que asignan memoria.

Captura de pantalla de la vista Funciones.

Captura de pantalla de la vista Funciones.

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.

Captura de pantalla de la vista Colección.

Captura de pantalla de la vista Colección.

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.

Captura de pantalla de los gráficos circulares en la vista de Colección.

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.