Compartir a través de


Instrumentación de la aplicación .NET en Visual Studio (C#, C++, Visual Basic, F#)

Con el lanzamiento de Visual Studio 2022, versión 17.5, puede usar la nueva herramienta de instrumentación dinámica. Esta herramienta muestra el número exacto de veces que se llaman tus funciones y es más rápida que la versión anterior de la herramienta de instrumentación. Esta herramienta admite la instrumentación de .NET Core sin necesidad de archivos PDB. A partir de Visual Studio 2022, versión 17.6 Preview 2, la herramienta también admite C/C++.

La herramienta es similar a la de Uso de CPU, excepto que se basa en el tiempo del reloj en lugar de en el uso de la CPU. Esto significa que el tiempo bloqueado, como el tiempo dedicado a esperar bloqueos, se muestra en el seguimiento de la instrumentación, a diferencia de la herramienta Uso de CPU. Para información adicional sobre cómo aprender a usar la herramienta Instrumentación de forma eficaz, consulte Información general sobre la Instrumentación y Caso práctico: Aislar un problema de rendimiento.

Instrumenta tu aplicación

  1. Seleccione Alt+F2 (o Depurar > Generador de perfiles de rendimiento) para abrir el generador de perfiles de rendimiento en Visual Studio.

  2. Seleccione la casilla Instrumentación.

    Captura de pantalla que muestra la herramienta de instrumentación seleccionada.

    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.

    Nota

    Si la herramienta no está disponible para la selección, desactive la casilla de cada una de las otras herramientas, porque algunas herramientas se deben ejecutar de forma independiente. Para obtener más información sobre cómo ejecutar herramientas conjuntamente, consulte Uso de varias herramientas de perfilado simultáneamente.

    Si la herramienta todavía no está disponible, compruebe que el proyecto cumple los requisitos anteriores. Asegúrese de que el proyecto esté en modo de versión para capturar los datos más precisos.

  3. Seleccione el botón Iniciar para ejecutar la herramienta.

  4. Seleccione los elementos del programa que se van a instrumentar.

    Recorte de pantalla que muestra el cuadro de diálogo Seleccionar elementos para Instrumentar.

    A partir de la versión 17.11 de Visual Studio 2022, el generador de perfiles conserva los elementos seleccionados para la siguiente ejecución de generación de perfiles.

    A partir de Visual Studio 2022, versión 17.13 Preview 1, puede seleccionar elementos para instrumentar en C++.

  5. Seleccione Aceptar.

  6. Después de que la herramienta comience a ejecutarse, siga el escenario que desea perfilar en su aplicación. Después, seleccione Detener colección o cierre la aplicación para ver los datos.

Análisis del informe de instrumentación

Los datos de generación de perfiles aparecen en Visual Studio.

Recorte de pantalla que muestra los datos de instrumentación de .NET. datos de instrumentación.

La vista de datos de instrumentación muestra una lista de funciones ordenadas por ejecución más larga, con la función más larga que se está ejecutando en la parte superior, en Funciones principales. En la sección Ruta de acceso activa se muestra la pila de llamadas para las funciones que más tardan. Estas listas le ayudarán a detectar las funciones en las que se producen cuellos de botella de rendimiento.

Haga clic en una función que le interese para obtener una vista más detallada.

Los datos disponibles son similares a la herramienta de uso del CPU, excepto que se basan en la hora de reloj y los recuentos de llamadas en lugar de la utilización del CPU.

Análisis de conclusiones

Si alguna idea aparece en la sección Información principal, utilice el vínculo proporcionado para obtener más información sobre el problema identificado. Para obtener más información, consulte Información de CPU, pero tenga en cuenta que la información de la herramienta de instrumentación es específica de la hora del reloj y no del uso de la CPU.

Además, si usa Copilot, haga clic en el botón Preguntar a Copilot para abrir la ventana de chat de Copilot, y Copilot proporcionará sugerencias basadas en una revisión de su código y los problemas identificados.

Análisis de informes detallados de instrumentación

Para analizar el informe Instrumentación haga clic en Abrir detalles o haga clic en una de las funciones principales para abrir la vista Funciones.

El informe proporciona distintas vistas de los datos de diagnóstico:

Ver Descripción
Llamador o destinatario Vista detallada del tiempo empleado en una función específica, las funciones que la llamaron y las funciones a las que esta llama. Los datos de rendimiento se agregan durante el período de recopilación de datos. Puede seleccionar las funciones de llamada y las funciones llamadas para recorrer la ruta de acceso de llamada.
Árbol de llamadas Vista jerárquica de la secuencia de llamadas de funciones. Se usa para identificar las rutas de llamadas que tardan más tiempo (rutas críticas).
Módulos Vista del tiempo invertido en módulos individuales, agregados durante el período de recopilación de datos. Sirve para identificar módulos que podrían ser cuellos de botella de rendimiento debido a una combinación de altos recuentos de llamadas o problemas de rendimiento.
Funciones Vista del tiempo invertido en funciones individuales, agregadas durante el período de recopilación de datos. Sirve para identificar funciones que podrían ser cuellos de botella de rendimiento debido a una combinación de altos recuentos de llamadas o problemas de rendimiento.
Gráfico de flama Vista jerárquica de la ruta de acceso de llamada de función en una visualización de gráfico de llamas. Se usa para identificar las rutas de llamadas que tardan más tiempo (ruta crítica).

En todas las vistas, excepto en Llamador o Destinatario, el informe de diagnóstico se ordena por Total de [unit, %], de mayor a menor. Puede cambiar el criterio de ordenación o la columna de ordenación seleccionando los encabezados de columna. Puede hacer doble clic en una función que le interese y verá el origen de la función, así como el resaltado que muestra dónde se invierte el tiempo en esa función. En la tabla se muestran columnas con datos como el tiempo empleado en la función, incluidas las funciones llamadas(total) y una segunda columna que muestra el tiempo empleado en una función, excepto las funciones llamadas (propio).

Estos datos pueden ayudarle a evaluar si la función en sí misma es un cuello de botella en el rendimiento. Determine cuántos datos mostrará el método para ver si el código de terceros o las bibliotecas en tiempo de ejecución son el motivo de que los puntos de conexión sean lentos o consuman recursos intensivamente.

Para obtener más información sobre el uso de Flame Graph, consulte Identificar rutas críticas utilizando Flame Graph.

Árbol de llamadas de Instrumentación

Para ver el árbol de llamadas, seleccione el nodo primario en el informe. De forma predeterminada, la página Instrumentación se abre en la vista Llamador/Receptor. En la lista desplegable Vista actual seleccione Árbol de llamadas. La vista de árbol de llamadas puede ayudar a identificar rápidamente los cuellos de botella en el rendimiento.

Puede hacer clic en los botones Expandir ruta crítica y Mostrar ruta crítica para ver las llamadas de función que utilizan más tiempo de reloj en la vista de árbol de llamadas.

Recorte de pantalla que muestra la estructura del árbol de llamadas.

A continuación se muestra más información sobre los valores de columna:

  • Total indica cuánto tiempo se ha empleado en la función y en cualquier función que ésta haya invocado. Los valores altos de Total indican las funciones que consumen más tiempo del reloj.

  • Self indica cuánto tiempo se pasó en el cuerpo de la función, excluyendo el tiempo que se pasó en las funciones que fueron llamadas por ella. Los valores altos de Self pueden indicar un cuello de botella de rendimiento dentro de la propia función.

  • Recuento de Llamadas indica el número de veces que se llama a una función.

  • Módulo El nombre del módulo que contiene la función.

Llamadas asincrónicas en el árbol de llamadas de Instrumentación (.NET)

A partir de la versión 17.13 preview 2 de Visual Studio 2022, las vistas que representan un árbol de llamadas visuales anidan llamadas asincrónicas de .NET en las funciones en las que se realizó la llamada asincrónica, lo que facilita el seguimiento del flujo de ejecución dentro de un único seguimiento unificado de la pila. Esto puede ayudarle a identificar rápidamente los cuellos de botella en el rendimiento.

El seguimiento de la pila unificado se muestra en la vista Árbol de llamadas y la sección Ruta de acceso activa de la página Resumen. Los nodos asincrónicos aparecen con el descriptor [llamada asincrónica].

Captura de pantalla que muestra la estructura del árbol de llamadas para las llamadas asincrónicas.

Es posible alternar la visualización de una pila de llamadas asincrónicas unidas seleccionando Unir pilas asincrónicas en la opción Filtro en la vista Resumen del generador de perfiles. La opción está habilitada de forma predeterminada.

Captura de pantalla en la que se muestra la opción Fijar pilas asincrónicas.