Análisis del uso de memoria sin depurar en el Generador de perfiles de rendimiento (C#, Visual Basic, C++, F#)

La herramienta Uso de memoria supervisa el uso de memoria de la aplicación. Puede usar la herramienta para estudiar los efectos en la memoria en tiempo real de los escenarios que esté desarrollando en Visual Studio. Puede tomar instantáneas detalladas de los estados de memoria de la aplicación y compararlas para determinar las causas de los problemas de memoria. La herramienta Uso de memoria es compatible con aplicaciones .NET, ASP.NET, C++ o de modo mixto (.NET y nativas).

La herramienta Uso de memoria se puede ejecutar con o sin el depurador. En este artículo, se muestra cómo usar la herramienta Uso de memoria sin el depurador en el Generador de perfiles de rendimiento de Visual Studio, que es lo que se recomienda para compilaciones de versión. Para obtener información sobre cómo elegir la mejor herramienta de análisis de memoria para sus necesidades, consulte Elección de una herramienta de análisis de memoria.

Sesiones de diagnóstico de uso de memoria

Para iniciar una sesión de diagnóstico de uso de memoria:

  1. Abra un proyecto en Visual Studio.

    La herramienta Uso de memoria es compatible con aplicaciones .NET, ASP.NET, C++ o de modo mixto (.NET y nativas).

  2. En el menú Depurar, establezca la configuración de la solución en Versión y seleccione Depurador local de Windows (o Equipo local) como el destino de implementación.

  3. En la barra de menús, seleccione Depurar>Generador de perfiles de rendimiento.

  4. En Herramientas disponibles, seleccione Uso de memoria y después Iniciar.

    Start a Memory Usage diagnostic session

Supervisar el uso de memoria

Al iniciar una sesión de diagnóstico, se inicia la aplicación y en la ventana Herramientas de diagnóstico se muestra un gráfico de escala de tiempo del uso de memoria de la aplicación.

Screenshot of the Diagnostic Tools window in the Visual Studio Performance Profiler showing a timeline graph of the app's memory use.

Screenshot of the Diagnostic Tools window in the Visual Studio Performance Profiler showing a timeline graph of the app's memory use.

En el gráfico de escala de tiempo se muestran las fluctuaciones de memoria mientras se ejecuta la aplicación. Los picos del gráfico suelen indicar que hay código recopilando o creando datos que luego descarta una vez que termina el procesamiento. Los picos grandes indican áreas que puede optimizar. La principal preocupación es un aumento del consumo de memoria que no se devuelve. Esto puede indicar un uso ineficaz de la memoria o incluso una fuga de memoria.

Tome instantáneas de los estados de memoria de la aplicación

Una aplicación usa un gran número de objetos, y es posible que quiera concentrar el análisis en un escenario. O bien, es posible que encuentre problemas de memoria para investigar. Puede tomar instantáneas durante una sesión de diagnóstico para capturar el uso de memoria en momentos concretos. Es aconsejable obtener una instantánea de línea de base de una aplicación antes de que aparezca un problema de memoria. Puede tomar otra instantánea después de la primera aparición del problema y otras adicionales si puede repetir el escenario.

Para recopilar instantáneas, elija Tomar instantánea cuando quiera capturar los datos de memoria.

Cerrar la sesión de diagnóstico

Para detener una sesión de supervisión sin crear un informe, simplemente cierre la ventana de diagnóstico. Para generar un informe cuando haya terminado de recopilar o haya tomado instantáneas, haga clic en Detener recopilación.

Stop Collection

Si tiene problemas para recopilar o mostrar datos, consulte Solución de problemas en la generación de perfiles y corrección de problemas.

Informes de uso de memoria

Una vez detenida la recopilación de datos, la herramienta Uso de memoria detiene la aplicación y muestra la página de información general Uso de memoria.

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.

Instantáneas de uso de memoria

Los números de los paneles Instantánea muestran los bytes y objetos en memoria cuando se ha tomado cada instantánea y la diferencia entre la instantánea y la anterior.

Los números son vínculos que abren vistas de informes de Uso de memoria detalladas en nuevas ventanas de Visual Studio. Un informe detallado de instantánea muestra los tipos y las instancias en una instantánea. Un informe de diferencias de instantáneas (diff) compara los tipos y las instancias en las dos instantáneas.

Snapshot view links

Image Descripción
Step 1 El número total de bytes en memoria cuando se tomó la instantánea. Haga clic en este vínculo para mostrar un informe de detalles de instantánea ordenado por el tamaño total de las instancias de tipo.
Step 2 El número total de objetos en memoria cuando se tomó la instantánea. Haga clic en este vínculo para mostrar un informe de detalles de instantánea ordenado por el recuento de instancias de los tipos.
Step 3 La diferencia entre el tamaño total de los objetos de memoria de esta instantánea y de la instantánea anterior. Un número positivo indica que el tamaño de memoria de esta instantánea es mayor que el de la anterior y un número negativo indica que el tamaño es menor. Línea base significa que una instantánea es la primera de una sesión de diagnóstico. No hay diferencia significa que la diferencia es cero. Haga clic en este vínculo para mostrar un informe diferencial de instantánea ordenado por la diferencia en cuanto al tamaño total de instancias de los tipos.
Step 4 La diferencia entre el número total de objetos de memoria de esta instantánea y de la instantánea anterior. Seleccione este vínculo para mostrar un informe de diferencias de instantánea. Se ordena por la diferencia en el recuento total de instancias de los tipos.

Snapshot view links

Image Descripción
Step 1 El número total de objetos en memoria cuando se tomó la instantánea. Haga clic en este vínculo para mostrar un informe de detalles de instantánea ordenado por el recuento de instancias de los tipos.
Step 2 La diferencia entre el número total de objetos de memoria de esta instantánea y de la instantánea anterior. Haga clic en este vínculo para mostrar un informe diferencial de instantánea ordenado por la diferencia en cuanto al recuento total de instancias de los tipos.
Step 3 El número total de bytes en memoria cuando se tomó la instantánea. Haga clic en este vínculo para mostrar un informe de detalles de instantánea ordenado por el tamaño total de las instancias de tipo.
Step 4 La diferencia entre el tamaño total de los objetos de memoria de esta instantánea y de la instantánea anterior. Un número positivo indica que el tamaño de memoria de esta instantánea es mayor que el de la anterior y un número negativo indica que el tamaño es menor. Línea base significa que una instantánea es la primera de una sesión de diagnóstico. No hay diferencia significa que la diferencia es cero. Haga clic en este vínculo para mostrar un informe diferencial de instantánea ordenado por la diferencia en cuanto al tamaño total de instancias de los tipos.

Informes de instantáneas de Uso de memoria

Cuando hace clic en uno de los vínculos de instantánea en la página de información general Uso de memoria, se abre un informe de instantáneas en una página nueva.

Memory Usage snapshot report

Memory Usage snapshot report

Si un Tipo de objeto es de color azul, puede seleccionarlo para navegar hasta el objeto en el código fuente en una ventana independiente.

Los tipos que no pueda identificar o cuya participación en el código no comprenda probablemente sean objetos de compilador, de .NET o del sistema operativo. La herramienta Uso de memoria muestra estos objetos si están implicados en las cadenas de propiedad de los objetos.

En el informe de instantáneas:

  • En el árbol Memoria administrada se muestran los tipos e instancias del informe. Al seleccionar un tipo o una instancia se muestran los árboles Rutas de acceso al nodo raíz y Objetos a los que se hace referencia para el elemento seleccionado.

  • El árbol Ruta de acceso al nodo raíz muestra la cadena de objetos que hace referencia a un tipo o una instancia. El recolector de elementos no utilizados de .NET limpia la memoria de un objeto únicamente si todas las referencias a este se han liberado.

  • En el árbol Tipos a los que se hace referencia u Objetos a los que se hace referencia se muestran los objetos a los que hace referencia el tipo o instancia seleccionado.

Filtros de árbol de informes

Muchos tipos de aplicaciones no son necesarios para los desarrolladores de aplicaciones. Los filtros de informe de instantánea pueden ocultar la mayoría de estos tipos en los árboles Memoria administrada y Rutas de acceso a la raíz.

Sort and filter options

Sort and filter options

  • Para filtrar un árbol por nombre de tipo, escriba el nombre en el cuadro Filtro. El filtro no distingue mayúsculas de minúsculas y reconoce la cadena especificada en cualquier parte de los nombres de tipo.

  • Seleccione Contraer pequeños objetos en la lista desplegable Filtro para ocultar aquellos tipos cuyo Tamaño (Bytes) es inferior al 0,5 por ciento de la memoria total.

  • Seleccione Solo mi código en la lista desplegable Filtro para ocultar la mayoría de las instancias generadas por código externo. Los tipos externos pertenecen al sistema operativo o a componentes de Framework, o son generados por el compilador.

Informes de detalles de instantánea

Un informe de detalles de instantánea describe una instantánea de una sesión de diagnóstico. Para abrir el informe, haga clic en el vínculo de tamaño o de objetos en un panel de instantánea.

Links to snapshot report in a snapshot pane

Links to snapshot report in a snapshot pane

Ambos vínculos abren el mismo informe. La única diferencia es el orden de inicio del árbol Memoria administrada. El vínculo de tamaño ordena el informe por la columna Tamaño inclusivo (bytes) . El vínculo Objetos ordena el informe por la columna Recuento. Puede cambiar la columna por la que se ordena o el orden después de abrir el informe.

Árbol Memoria administrada (informes de detalles de instantánea)

En el árbol Memoria administrado se enumeran los tipos de objetos retenidos en memoria. Expanda un nombre de tipo para ver las diez mayores instancias del tipo, ordenadas por tamaño. Haga clic en un tipo o una instancia para mostrar los árboles Rutas de acceso al nodo raíz y Objetos a los que se hace referencia para el elemento seleccionado.

Managed Heap tree

Managed Memory tree

El árbol Memoria administrada de un informe de detalles de instantánea tiene las siguientes columnas:

Nombre Descripción
Tipo de objeto Nombre del tipo o instancia del objeto.
Recuento Número de instancias del objeto del tipo. Recuento siempre es 1 para una instancia.
Tamaño (bytes) Para un tipo, el tamaño de todas las instancias del tipo en la instantánea, menos el tamaño de los objetos contenidos en las instancias. Para una instancia, el tamaño del objeto, menos el tamaño de los objetos contenidos en la instancia.
Tamaño inclusivo (bytes) El tamaño de las instancias del tipo o el tamaño de una única instancia, incluso el tamaño de los objetos incluidos.
Módulo El módulo que contiene este objeto.

Rutas de acceso al árbol raíz (informes de detalles de instantánea)

El árbol Ruta de acceso al nodo raíz muestra la cadena de objetos que hace referencia a un tipo o una instancia. El recolector de elementos no utilizados de .NET limpia la memoria de un objeto únicamente si todas las referencias a este se han liberado.

Para un tipo en el árbol Rutas de acceso al nodo raíz, el número de objetos que contienen referencias a ese tipo se muestra en la columna Recuento de referencias.

Paths to Root tree for types

Paths to Root tree for types

Árboles Tipos a los que se referencia u Objetos a los que se hace referencia (informes de detalles de instantánea)

En el árbol Tipos a los que se hace referencia u Objetos a los que se hace referencia se muestran los objetos a los que hace referencia el tipo o instancia seleccionado.

Referenced Objects tree for instances

Referenced Objects tree for instances

El árbol Tipos a los que se hace referencia en un informe de detalles de instantánea tiene las siguientes columnas. Un árbol Objetos a los que se hace referencia no tiene la columna Recuento de referencias.

Nombre Descripción
Tipo de objeto o Instancia El nombre del tipo o instancia.
Recuento de referencias Para los tipos, el número de instancias del objeto del tipo.
Tamaño (bytes) Para un tipo, el tamaño de todas las instancias del tipo, sin incluir el tamaño de objetos incluidos en el tipo. Para una instancia, el tamaño del objeto sin incluir el tamaño de objetos incluidos en el objeto.
Tamaño inclusivo (bytes) El tamaño de las instancias del tipo o tamaño de la instancia, incluyendo el tamaño de los objetos incluidos.
Módulo El módulo que contiene este objeto.

Informes de diferencias de instantánea

Un informe de diferencias de instantánea muestra los cambios entre una instantánea principal y la anterior. Para abrir un informe de diferencias, haga clic en uno de los vínculos de diferencia en un panel de la instantánea.

Ambos vínculos abren el mismo informe. La única diferencia es el orden de inicio del árbol Memoria administrada del informe. El vínculo de tamaño ordena el informe por la columna Diferencias de tamaño inclusivo (bytes) . El vínculo Objetos ordena el informe por la columna Diferencias de recuento. Puede cambiar la columna por la que se ordena o el orden después de abrir el informe.

Links to difference report in a snapshot pane

Links to difference report in a snapshot pane

Árbol Memoria administrada (informes de diferencias de instantánea)

En el árbol Memoria administrado se enumeran los tipos de objetos retenidos en memoria. Puede expandir un nombre de tipo para ver las diez mayores instancias del tipo, ordenadas por tamaño. Haga clic en un tipo o una instancia para mostrar los árboles Rutas de acceso al nodo raíz y Objetos a los que se hace referencia para el elemento seleccionado.

Managed Heap tree for a type in difference report

Managed Memory tree for a type in difference report

El árbol Memoria administrado en un informe de diferencias de instantánea tiene las siguientes columnas:

Nombre Descripción
Tipo de objeto Nombre del tipo o instancia del objeto.
Recuento Número de instancias de un tipo en la instantánea principal. Recuento siempre es 1 para una instancia.
Diferencia de recuento Para un tipo, diferencia en cuanto al número de instancias del tipo entre la instantánea principal y la anterior. Para una instancia el campo está en blanco.
Tamaño (bytes) El tamaño de los objetos de la instantánea principal, sin incluir el tamaño de los objetos en los objetos. Para un tipo, Tamaño (bytes) y Tamaño inclusivo (bytes) son los totales de los tamaños de las instancias del tipo.
Diferencia de tamaño total (bytes) Para un tipo, la diferencia en el tamaño total de instancias del tipo entre la instantánea principal y la anterior, sin incluir el tamaño de objetos en las instancias. Para una instancia el campo está en blanco.
Tamaño inclusivo (bytes) El tamaño de los objetos de la instantánea principal, incluyendo el tamaño de los objetos en los objetos.
Diferencia de tamaño inclusivo (bytes) Para un tipo, la diferencia en el tamaño de todas las instancias del tipo entre la instantánea principal y la anterior, incluyendo el tamaño de objetos en los objetos. Para una instancia el campo está en blanco.
Módulo El módulo que contiene este objeto.

Árbol Rutas de acceso al nodo raíz (informes de diferencias de instantánea)

El árbol Ruta de acceso al nodo raíz muestra la cadena de objetos que hace referencia a un tipo o una instancia. El recolector de elementos no utilizados de .NET limpia la memoria de un objeto únicamente si todas las referencias a este se han liberado.

Para un tipo en el árbol Rutas de acceso al nodo raíz, el número de objetos que contienen referencias a ese tipo se muestra en la columna Recuento de referencias. La diferencia de recuento con respecto a la instantánea anterior está en la columna Diferencia de referencia.

Paths To Root tree in a diff report

Paths To Root tree in a diff report

Árboles Tipos a los que se referencia u Objetos a los que se hace referencia (informes de diferencias de instantánea)

En el árbol Tipos a los que se hace referencia u Objetos a los que se hace referencia se muestran los objetos a los que hace referencia el tipo o instancia seleccionado.

Referenced Types in a diff report

Referenced Types in a diff report

El árbol Tipos a los que se hace referencia en un informe de diferencias de instantánea tiene las siguientes columnas. Un árbol Objetos a los que se hacer referencia tiene las columnas Instancia, Tamaño (Bytes) , Tamaño inclusivo (Bytes) y Módulo.

NOMBRE Descripción
Tipo de objeto o Instancia Nombre del tipo o instancia del objeto.
Recuento de referencias Número de instancias de un tipo en la instantánea principal.
Diferencia de recuento de referencias Para un tipo, diferencia en cuanto al número de instancias del tipo entre la instantánea principal y la anterior.
Tamaño (bytes) El tamaño de los objetos de la instantánea principal, sin incluir el tamaño de los objetos en los objetos. Para un tipo, Tamaño (bytes) y Tamaño inclusivo (bytes) son los totales de los tamaños de las instancias del tipo.
Diferencia de tamaño total (bytes) Para un tipo, la diferencia en el tamaño total de instancias del tipo entre la instantánea principal y la anterior, sin incluir el tamaño de objetos en las instancias.
Tamaño inclusivo (bytes) El tamaño de los objetos de la instantánea principal, incluyendo el tamaño de los objetos en los objetos.
Diferencia de tamaño inclusivo (bytes) Para un tipo, la diferencia en el tamaño de todas las instancias del tipo entre la instantánea principal y la anterior, incluyendo el tamaño de objetos en los objetos.
Módulo El módulo que contiene este objeto.

Informe de conocimientos

En Visual Studio 2022, la herramienta Análisis de memoria también proporciona varias conclusiones automáticas integradas eficaces para la memoria administrada. Seleccione la pestaña Información en los informes de tipos administrados y se mostrará la información automática aplicable, como Cadenas duplicadas, Matrices dispersas y Pérdidas del controlador de eventos. Para obtener más información, consulte Información de uso de la memoria.

Screenshot of Managed memory insights.