Primer vistazo a las herramientas de generación de perfiles (C#, Visual Basic, C++, F#)
Las herramientas de medición de rendimiento de aplicaciones son esenciales para los desarrolladores que desean optimizar su código y mejorar el rendimiento de la aplicación. Visual Studio ofrece una variedad de herramientas de generación de perfiles y diagnóstico que pueden ayudarle a diagnosticar el uso de memoria y CPU y otros problemas de nivel de aplicación. Con estas herramientas, puede acumular los datos de rendimiento mientras ejecuta la aplicación. Un generador de perfiles puede ayudarle a tomar decisiones fundamentadas rápidamente al proporcionar una representación visual de los entornos de ejecución y el uso de la CPU para su aplicación. En este artículo, echamos un vistazo rápido a las herramientas de generación de perfiles más habituales.
Para obtener ayuda con la elección de la herramienta correcta o para ver la compatibilidad de las herramientas de generación de perfiles con diferentes tipos de aplicaciones, consulte ¿Qué herramienta debo usar? Para ver un tutorial en el que se muestra un enfoque general para optimizar el código mediante las herramientas de generación de perfiles, consulte Caso práctico: Guía para principiantes sobre la optimización del código.
Medición del rendimiento en compilaciones de versión
Las herramientas del Generador de perfiles de rendimiento están diseñadas para proporcionar análisis de las compilaciones de versión. En el Generador de perfiles de rendimiento, puede recopilar información de diagnóstico mientras se ejecuta la aplicación y, después, examinar la información recopilada cuando la aplicación se haya detenido (un análisis final).
Para abrir el Generador de perfiles de rendimiento, seleccione Depurar>Generador de perfiles de rendimiento (o Alt + F2).
Para más información sobre el uso de la herramienta Uso de CPU o Uso de memoria en el Generador de perfiles de rendimiento frente a las herramientas integradas en el depurador, consulte Ejecución de herramientas de generación de perfiles con o sin el depurador.
Las herramientas disponibles en el Generador de perfiles de rendimiento incluyen:
- Uso de CPU
- Asignación de objetos .NET
- Uso de memoria
- Instrumentación
- Herramienta asincrónica de .NET
- E/S de archivos
- Contadores de .NET
- Herramienta de base de datos
- Uso de GPU
Para ver la compatibilidad de la herramienta de generación de perfiles con los diferentes tipos de aplicaciones, consulte ¿Qué herramienta debo usar?
En algunos escenarios, la ventana le permite seleccionar varias herramientas de generación de perfiles. Las herramientas como Uso de CPU proporcionan datos complementarios que le pueden ayudar en el análisis. También puede usar el generador de perfiles de la línea de comandos para habilitar escenarios con varias herramientas de generación de perfiles.
Medición del rendimiento durante la depuración
Las herramientas de generación de perfiles a las que puede obtener acceso durante una sesión de depuración están disponibles en la ventana Herramientas de diagnóstico. La ventana Herramientas de diagnóstico aparece automáticamente a menos que la desactive. Para abrir la ventana, haga clic en Depurar/Ventanas /Mostrar herramientas de diagnóstico (o presione Ctrl + Alt + F2). Con la ventana abierta, puede seleccionar las herramientas para las que se van a recopilar datos.
Durante la depuración, puede usar la ventana Herramientas de diagnóstico para analizar la CPU,el uso de memoria y los contadores de .NET, y puede ver los eventos que muestran información relacionada con el rendimiento.
Durante la depuración, puede usar la ventana Herramientas de diagnóstico para analizar la CPU y el uso de memoria, y puede ver los eventos que muestran información relacionada con el rendimiento.
La ventana Herramientas de diagnóstico es una manera habitual de generar perfiles de aplicaciones, pero en el caso de las compilaciones de versión, también puede hacer un análisis posterior de la aplicación. Para más información sobre los diferentes enfoques, consulte Ejecutar herramientas de generación de perfiles con o sin el depurador. Para ver la compatibilidad de la herramienta de generación de perfiles con los diferentes tipos de aplicaciones, consulte ¿Qué herramienta debo usar?
Las herramientas disponibles en la ventana Herramientas de diagnóstico o durante una sesión de depuración incluyen:
Sugerencia
Use la opción de reinicio para saltarse la página de inicio y realizar la ejecución de forma automática con su configuración anterior presionando Alt+F2 o haciendo clic en Depurar > Generador de perfiles de rendimiento.
Nota
Para ejecutar las herramientas de generación de perfiles con el depurador se requiere Windows 8 y versiones posteriores (ventana Herramientas de diagnóstico).
Analizar el uso de CPU
La herramienta Uso de CPU es un buen lugar para empezar a analizar el rendimiento de la aplicación. Le proporcionará más información sobre los recursos de CPU que consume la aplicación. Puede usar la herramienta Uso de CPU integrada en el depurador o la herramienta Uso de CPU de análisis final.
Al usar la herramienta Uso de CPU integrada en el depurador, abra la ventana Herramientas de diagnóstico (si está cerrada, elija Depurar / Ventanas / Mostrar Herramientas de diagnóstico). Durante la depuración, abra la vista Resumen y seleccione Registrar perfil CPU.
Una forma de usar la herramienta es establecer dos puntos de interrupción en el código, uno al principio y otro al final de la función o la región de código que quiere analizar. Examine los datos de generación de perfiles cuando se haya detenido en el segundo punto de interrupción.
La vista Uso de CPU muestra una lista de funciones ordenadas por la ejecución más larga, con la función más larga que se está ejecutando en la parte superior, en Funciones principales. La sección Ruta de acceso activa se muestra la pila de llamadas para las funciones que usan más potencia de la CPU. Estas listas le ayudarán a detectar las funciones en las que se producen cuellos de botella de rendimiento.
La vista Uso de CPU muestra una lista de funciones ordenadas por la ejecución más larga, con la función más larga que se está ejecutando en la parte superior. Esto le ayudará a detectar las funciones en las que se producen cuellos de botella de rendimiento.
Haz doble clic en una función que te interese y obtendrás una vista de Árbol de llamadas más detallada, con la función seleccionada destacada. En la tabla se muestran columnas con datos como el tiempo empleado en la función, incluidas las funciones llamadas(CPU total) y una segunda columna que muestra el tiempo empleado en una función, excepto las funciones llamadas(Propio CPU). Estos datos pueden ayudarle a evaluar si la función en sí es un cuello de botella de rendimiento.
Sugerencia
El generador de perfiles de Visual Studio admite tanto la recopilación como la visualización de seguimientos. También puede ver los seguimientos recopilados de antemano por otras herramientas, como dotnet-trace. Dotnet-trace genera resultados de muestreo, no un seguimiento instrumentado. Para más información, vea dotnet-trace.
Si haces clic en una función que te interese, obtendrás una vista de "mariposa" de tres paneles más detallada, con la función seleccionada en el centro de la ventana, la función de llamada a la izquierda y las funciones llamadas a la derecha. En la sección Cuerpo de la función se muestra la cantidad total de tiempo (y el porcentaje de tiempo) empleado en el cuerpo de la función, excluido el tiempo invertido en las funciones de llamada y las funciones llamadas. Estos datos pueden ayudarle a evaluar si la función en sí es un cuello de botella de rendimiento.
Analizar el uso de memoria
La ventana Herramientas de diagnóstico permite evaluar el uso de memoria en la aplicación mediante la herramienta Uso de memoria. Por ejemplo, puede buscar el número y el tamaño de los objetos del montón. Puede usar la herramienta Uso de memoria integrada en el depurador o la herramienta Uso de memoria de análisis final del Generador de perfiles de rendimiento.
Los desarrolladores de .NET pueden elegir entre la herramienta de asignación de objetos .NET o la herramienta Uso de memoria.
- La herramienta de asignación de objetos .NET ayuda a identificar patrones de asignación y anomalías en el código de .NET, además de problemas habituales en la recolección de elementos no utilizados. Esta herramienta solo se ejecuta a modo de análisis post mortem. Puede ejecutar esta herramienta en máquinas locales o remotas.
- La herramienta Uso de memoria es útil para identificar fugas de memoria, que no suelen ser habituales en aplicaciones .NET. Si necesita usar características del depurador mientras comprueba la memoria, como ejecutar paso a paso el código, se recomienda la herramienta Uso de memoria integrada en el depurador.
Para analizar el uso de memoria con la herramienta Uso de memoria, se debe tomar al menos una instantánea de memoria. A menudo, la mejor manera de analizar la memoria consiste en tomar dos instantáneas: la primera justo antes de que se produzca un problema que sospecha que existe en la memoria y la segunda después de que se produzca el problema en cuestión. Después, puede ver las diferencias que existen entre las dos instantáneas y constatar qué es lo que ha cambiado exactamente. En la ilustración siguiente se muestra cómo tomar una instantánea con la herramienta integrada en el depurador.
Al seleccionar uno de los vínculos de flecha, se le asigna una vista diferencial del montón (una flecha hacia arriba roja muestra un número de objetos creciente (izquierda) o un tamaño de montón creciente (derecha)). Si hace clic en el vínculo de la derecha, obtendrá una vista diferencial del montón ordenada por los objetos que más han aumentado en el tamaño del montón. Esto puede ayudarle a identificar problemas de memoria. Por ejemplo, en la ilustración siguiente, los bytes usados por los objetos ClassHandlersStore
han aumentado 3,492 bytes en la segunda instantánea.
En cambio, si hace clic en el vínculo de la izquierda en la vista Uso de memoria, la vista del montón se organiza por número de objetos y se muestran los objetos de un tipo determinado que más han aumentado en número en la parte superior (ordenados por la columna Dif. de recuento).
Instrumentación
La herramienta de instrumentación es similar a la herramienta Uso de CPU, excepto que proporciona recuentos de llamadas exactos y tiempo de reloj de pared en lugar de utilización de la CPU. El método de instrumentación requiere más sobrecarga que la herramienta Uso de CPU. Esta herramienta está disponible en el generador de perfiles de rendimiento. Para abrir el Generador de perfiles de rendimiento, seleccione Depurar>Generador de perfiles de rendimiento (o Alt + F2). Para más información, consulta: Instrumentación.
Examinar E/S de archivos
La herramienta E/S de archivos le ayuda a comprender cómo puede optimizar las operaciones de E/S de archivos para mejorar el rendimiento de las aplicaciones. Si está intentando investigar y diagnosticar tiempos de carga lentos, la nueva herramienta de E/S de archivos puede ayudarle a comprender cómo afectan las operaciones de E/S al tiempo dedicado. Esta herramienta está disponible en el generador de perfiles de rendimiento. Abra el Generador de perfiles de rendimiento seleccionando Depurar > Generador de perfiles de rendimiento (o Alt + F2).
La herramienta muestra las operaciones de lectura y escritura de archivos en una vista de lista con pestañas.
Examen del rendimiento mediante PerfTips
A menudo, la manera más sencilla de ver la información de rendimiento es mediante el uso de PerfTips. Con PerfTips, se puede ver información de rendimiento mientras se interactúa con el código. Puede comprobar información como la duración del evento, medida desde el momento en que el depurador se ha detenido por última vez o desde que se ha iniciado la aplicación. Por ejemplo, si se revisa paso a paso el código (F10, F11), PerfTips muestra la duración en tiempo de ejecución de la aplicación, desde la operación del paso anterior hasta el paso actual.
Puede usar PerfTips para examinar cuánto tiempo tarda un bloque de código en ejecutarse o en completarse una sola función.
PerfTips muestra los mismos eventos que también se muestran en la vista Eventos de las Herramientas de diagnóstico. En la vista Eventos se pueden ver eventos distintos que se producen durante la depuración, como la configuración de un punto de interrupción o una operación de procesamiento de código paso a paso.
Nota
Si tiene Visual Studio Enterprise, también puede ver Eventos de IntelliTrace en esta pestaña.
Análisis de código asincrónico (.NET)
La herramienta .NET Async permite analizar el rendimiento del código asincrónico en la aplicación. Esta herramienta está disponible en el generador de perfiles de rendimiento. Para abrir el Generador de perfiles de rendimiento, seleccione Depurar>Generador de perfiles de rendimiento (o Alt + F2).
La herramienta muestra cada operación asincrónica en una vista de lista. Puede ver información como la hora de inicio, la hora de finalización y el tiempo total de una operación asincrónica.
Análisis de código asincrónico (.NET)
La herramienta .NET Async permite analizar el rendimiento del código asincrónico en la aplicación. Esta herramienta está disponible en el generador de perfiles de rendimiento. Para abrir el Generador de perfiles de rendimiento, seleccione Depurar>Generador de perfiles de rendimiento (o Alt + F2).
La herramienta muestra cada operación asincrónica en una vista de lista. Puede ver información como la hora de inicio, la hora de finalización y el tiempo total de una operación asincrónica.
Análisis del rendimiento de base de datos (.NET Core)
En el caso de las aplicaciones .NET Core que usan ADO.NET o Entity Framework Core, la herramienta de base de datos permite registrar las consultas de base de datos realizadas por la aplicación durante una sesión de diagnóstico. A continuación, puede analizar la información sobre consultas individuales para buscar dónde se puede mejorar el rendimiento de la aplicación. Esta herramienta está disponible en el generador de perfiles de rendimiento. Para abrir el Generador de perfiles de rendimiento, seleccione Depurar>Generador de perfiles de rendimiento (o Alt + F2).
La herramienta muestra cada consulta en una vista de lista. Puede ver información como la hora de inicio y la duración de la consulta.
Visualización de contadores de .NET (.NET Core)
A partir de la versión 16.7 de Visual Studio 2019, puede usar la herramienta contadores de .NET en Visual Studio para visualizar los contadores de rendimiento. Puede visualizar los contadores creados mediante los contadores de dotnet. Los contadores de dotnet admiten muchos contadores, como el uso de CPU y el tamaño del montón del recolector de elementos no utilizados.
La herramienta muestra los valores activos de cada contador en una vista de lista.
Examen de eventos de aplicaciones
El visor de eventos genérico permite ver la actividad de la aplicación a través de una lista de eventos, como configuraciones del sistema, inicio de subprocesos y carga de módulos, para ayudar a realizar un mejor diagnóstico del rendimiento de la aplicación en el generador de perfiles de Visual Studio. Esta herramienta está disponible en el generador de perfiles de rendimiento. Para abrir el Generador de perfiles de rendimiento, seleccione Depurar>Generador de perfiles de rendimiento (o Alt + F2).
La herramienta muestra cada evento en una vista de lista. Las columnas proporcionan información sobre cada evento, como el nombre del evento, la marca de tiempo y el identificador de proceso.
Ver eventos personalizados en los gráficos de la cronología
Puede crear mediante programación eventos personalizados que aparezcan como iconos en los gráficos de la cronología, como los gráficos de cronología de uso de CPU y uso de memoria. Para obtener más información, consulte Agregar marcas de usuario a la cronología.
Análisis del consumo de recursos (XAML)
En las aplicaciones XAML (como las aplicaciones de WPF de escritorio de Windows y las aplicaciones para UWP), puede analizar el consumo de recursos mediante la herramienta Escala de tiempo de la aplicación. Por ejemplo, puede analizar el tiempo consumido por la aplicación en la preparación de marcos de la interfaz de usuario (diseño y presentación), la atención de solicitudes de red y de disco y escenarios como el inicio de la aplicación, carga de la página y cambio de tamaño de las ventanas. Para usar la herramienta, seleccione Escala de tiempo de la aplicación en el Generador de perfiles de rendimiento y, después, elija Iniciar. En la aplicación, recorra el escenario en el que sospecha que se produce un problema de consumo de recursos y, después, seleccione Detener recolección para generar el informe.
Los valores de framerate bajos en el gráfico Rendimiento visual podrían corresponderse con los problemas visuales que ve cuando se ejecuta la aplicación. De forma similar, los números elevados en el gráfico Uso del subproceso de UI podrían corresponderse con problemas en la capacidad de respuesta de la interfaz de usuario. En el informe, puede seleccionar un período de tiempo en el que sospecha que se produce un problema de rendimiento y, después, examinar las actividades detalladas del subproceso de interfaz de usuario en la vista Detalles de la escala de tiempo (panel inferior).
En la vista Detalles de la escala de tiempo, puede encontrar información como el tipo de actividad (o el elemento de la interfaz de usuario implicado) junto con la duración de la actividad. Por ejemplo, en la ilustración, un evento de Diseño para un control de cuadrícula tarda 57,53 ms.
Para obtener más información, vea Application Timeline (Escala de tiempo de la aplicación).
Examinar eventos de accesibilidad y rendimiento de la interfaz de usuario (UWP)
En las aplicaciones de UWP, puede habilitar Análisis de UI en la ventana Herramientas de diagnóstico. La herramienta busca problemas comunes de rendimiento o de accesibilidad y los muestra en la vista Eventos durante la depuración. Las descripciones de los eventos proporcionan información que puede ayudar a resolver problemas.
Análisis del uso de la GPU (Direct3D)
En las aplicaciones Direct3D (los componentes Direct3D deben estar en C++), puede examinar la actividad de la GPU y analizar problemas de rendimiento. Para obtener más información, vea GPU Usage (Uso de GPU). Para usar la herramienta, seleccione Uso de GPU en el Generador de perfiles de rendimiento y, después, elija Iniciar. En la aplicación, recorra el escenario del que le interesa generar un perfil y, después, seleccione Detener recolección para generar un informe.
Si elige un período de tiempo en los gráficos y selecciona Ver detalles, aparece una vista detallada en el panel inferior. En la vista detallada, puede examinar cuántas actividades se producen en cada CPU y GPU. Seleccione los eventos en el panel inferior para que aparezcan elementos emergentes en la escala de tiempo. Por ejemplo, seleccione el evento Presente para ver elementos emergentes de llamada Presente. (Las líneas VSync verticales de color gris claro se pueden usar como referencia para comprender si ciertas llamadas Presentes no han contactado con VSync. Debe haber una llamada Presente entre cada dos VSyncs para que la aplicación alcance constantemente 60 FPS).
También puede usar los gráficos para determinar si hay cuellos de botella de rendimiento relacionados con la CPU o con la GPU.
Análisis de rendimiento (herramientas heredadas)
En Visual Studio 2019, el Explorador de rendimiento heredado y las herramientas de generación de perfiles relacionadas, como el Asistente de rendimiento, se han incorporado al Generador de perfiles de rendimiento, que se puede abrir mediante Depurar>Generador de perfiles de rendimiento. En el Generador de perfiles de rendimiento, las herramientas de diagnóstico disponibles dependen del destino elegido y del proyecto de inicio abierto actual. La herramienta Uso de CPU proporciona la capacidad de muestreo anteriormente admitida en el Asistente de rendimiento. La herramienta Instrumentación proporciona la capacidad de generación de perfiles instrumentada (para recuentos y duraciones de llamadas precisos) que se encontraba en el Asistente de rendimiento. En el Generador de perfiles de rendimiento, además, aparecen otras herramientas de memoria.