Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede usar las herramientas de generación de perfiles para recopilar y ver datos de BenchmarkDotNet en Visual Studio. BenchmarkDotNet es una biblioteca de .NET de código abierto diseñada para realizar pruebas comparativas de rendimiento. Automatiza el proceso de medición y comparación del tiempo de ejecución, el uso de memoria y otras métricas de rendimiento del código de .NET de forma confiable y repetible.
Para usar BenchmarkDotNet, instale los paquetes NuGet necesarios en el proyecto y agregue atributos al código que coincidan con el tipo de información de rendimiento que le interesa.
Prerrequisitos
Visual Studio 2022, versión 17.9 o posterior
El proyecto de prueba comparativa debe incluir los dos paquetes NuGet siguientes:
Si usa la plantilla de proyecto Benchmark, estos paquetes NuGet están presentes al crear el proyecto.
Configurar su proyecto
Los atributos de pruebas comparativas se deben agregar a una aplicación de consola de .NET. Los atributos se pueden agregar a las funciones contenedoras que hacen referencia a otros tipos de proyecto.
Para preparar el proyecto para la compatibilidad con BenchmarkDotNet, use uno de los métodos siguientes:
Abra un proyecto de consola existente o cree un proyecto de consola. En este escenario, agregará manualmente compatibilidad con BenchmarkDotNet.
Use la plantilla Proyecto de pruebas comparativas . Algunos de los pasos descritos en este artículo solo son necesarios cuando se agrega manualmente compatibilidad con BenchmarkDotNet.
La plantilla Benchmark Project genera un proyecto BenchmarkDotNet totalmente integrado con soporte integrado para el perfil del uso de la CPU y las perspectivas de Copilot. Para usar la plantilla, seleccione Generación de perfiles en la lista de tipos de proyecto al crear un proyecto y, a continuación, elija Proyecto de prueba comparativa. Para obtener información sobre los atributos, consulte Atributo del código.
Cree un proyecto de consola o use un proyecto de consola existente.
Los atributos de pruebas comparativas se deben agregar a una aplicación de consola de .NET. Los atributos se pueden agregar a las funciones contenedoras que hacen referencia a otros tipos de proyecto.
Atribuir tu código
Al agregar un diagnosticador BenchmarkDotNet a las clases de benchmarks como atributo, configura la aplicación para generar un archivo .diagsession después de ejecutar los benchmarks. A continuación, puede abrir el archivo .diagsession en Visual Studio y ver los datos de generación de perfiles de las pruebas comparativas.
Se admiten los siguientes diagnósticos:
- Diagnosticador del Uso de la CPU
- Diagnóstico de Base de Datos
- DotNetCountersDiagnoser
- EventsDiagnoser
- FileIODiagnoser
Cada diagnóstico genera datos de rendimiento relacionados con ese diagnóstico. Por ejemplo, CPUUsageDiagnoser genera un archivo .diagsession con datos de CPU en él y DatabaseDiagnoser genera un archivo .diagsession con datos en las operaciones de base de datos. Las limitaciones corresponden a la herramienta de generación de perfiles asociada. Por ejemplo, la herramienta database del generador de perfiles funciona en ADO.NET o Entity Framework Core.
Para atribuir tu código a diagnosticadores y pruebas comparativas:
Agregue el nombre del diagnóstico como atributo a la clase que contiene los puntos de referencia para los que desea generar datos.
Agregue el
Benchmarkatributo a los métodos que desea probar para el rendimiento.Por ejemplo, puede usar el código siguiente para CPUUsageDiagnoser.
Si usa la plantilla Benchmark Project , el código de ejemplo ya se proporciona en la plantilla. Si va a agregar manualmente compatibilidad con BenchmarkDotNet, puede usar el código de ejemplo siguiente.
using System; using System.Security.Cryptography; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; using Microsoft.VSDiagnostics; namespace MyBenchmarks { [CPUUsageDiagnoser] public class Md5VsSha256 { private const int N = 10000; private readonly byte[] data; private readonly SHA256 sha256 = SHA256.Create(); private readonly MD5 md5 = MD5.Create(); public Md5VsSha256() { data = new byte[N]; new Random(42).NextBytes(data); } [Benchmark] public byte[] Sha256() => sha256.ComputeHash(data); [Benchmark] public byte[] Md5() => md5.ComputeHash(data); } public class Program { public static void Main(string[] args) { var summary = BenchmarkRunner.Run(typeof(Program).Assembly); } } }
Recopilación y visualización de datos de Benchmark.NET
Configure la compilación como una compilación de lanzamiento en lugar de una compilación de depuración.
Ejecute la aplicación para generar el archivo .diagsession .
Compruebe la salida de la consola para obtener la ubicación del archivo. Por ejemplo:
// * Diagnostic Output - VSDiagnosticsDiagnoser * Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'. Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4} Stopped Exported diagsession file: *.diagsessionEn Visual Studio, seleccione Archivo > Abierto > Archivo y vaya a la ubicación del archivo .diagsession, y a continuación, seleccione y abra el archivo.
Seleccione la pestaña Benchmarks (Pruebas comparativas ) para ver los datos de las pruebas comparativas BenchmarkDotNet.
Para obtener más información sobre los resultados de la pestaña Benchmarks , consulte la documentación de BenchmarkDotNet .
Haga clic con el botón derecho en una fila en los resultados y elija Seleccionar intervalo de tiempo para sincronizar el gráfico de escala de tiempo con la prueba comparativa.
Seleccione una de las pestañas disponibles, como Uso de CPU o Asignaciones.
En función del diagnóstico que usó para recopilar datos, puede obtener información relacionada con la asignación de memoria, el uso de CPU, los contadores y otros datos de rendimiento. Para analizar las asignaciones de memoria, use memoryDiagnoser integrado agregando el atributo [MemoryDiagnoser]. Para obtener más información, consulte Diagnósticos.
Nota:
El generador de perfiles solo admite [MemoryDiagnoser] y los diagnósticos enumerados anteriormente en este artículo.
Para obtener un ejemplo del uso del generador de perfiles para analizar las asignaciones de memoria, consulte la entrada de blog Benchmarking with Visual Studio Profiler (Pruebas comparativas con Visual Studio Profiler).
Para analizar los datos relacionados con otras pestañas, como uso de CPU, consulte los artículos correspondientes en la documentación de generación de perfiles.
Optimización con Copilot
Puede desencadenar optimizaciones de asignación de CPU y memoria para las pruebas comparativas benchmarkDotNet directamente desde el editor mediante CodeLens. Esto hace que el ajuste del rendimiento sea más accesible y sin problemas, lo que le ayuda a encontrar y corregir problemas de asignación de CPU y memoria justo donde se codifica.
Seleccione el indicador CodeLens encima de la prueba comparativa y, a continuación, seleccione la opción Optimizar asignaciones con Copilot.