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:
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).
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.
En la barra de menús, seleccione Depurar>Generador de perfiles de rendimiento.
En Herramientas disponibles, seleccione Uso de memoria y después Iniciar.
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.
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.
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.
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.
Image | Descripción |
---|---|
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. | |
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. | |
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. | |
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. |
Image | Descripción |
---|---|
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. | |
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. | |
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. | |
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.
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.
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.
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.
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.
Á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.
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.
Á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.
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.
Á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.
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.