Pruebas de rendimiento en .NET con BenchmarkDotNet
Ejecuta mediciones de rendimiento a tus m茅todos en .NET 馃殌 y optimiza tus aplicaciones como un profesional. 馃敟

BenchmarkDotNet es una herramienta de .NET que se emplea para realizar pruebas comparativas de rendimiento en c贸digo .NET. Es especialmente 煤til cuando es necesario evaluar y contrastar distintas implementaciones de c贸digo para determinar cu谩l es m谩s eficiente en t茅rminos de tiempo de ejecuci贸n, uso de memoria y otros recursos.

C贸mo aplicarlo a un proyecto

La biblioteca tiene muchos usos y formas de configurarla, pero aqu铆 te mostrar茅 la m谩s simple y directa mediante un ejemplo.

Testeando un proyecto de tipo consola

Instalar la biblioteca:

En la clase Program.cs codificar lo siguiente:

    [MemoryDiagnoser]
    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            BenchmarkRunner.Run<Program>();
        }
        [Benchmark]        
        public bool CompasissonWithUpper()
        {
            string parameter1 = "BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER";
            string parameter2 = "BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPEr";
            return parameter1.ToUpper() == parameter2.ToUpper();
        }
        [Benchmark]        
        public bool CompasissonWithEquals()
        {
            string parameter1 = "BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER";
            string parameter2 = "BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPER BRAVE DEVELOPEr";
            return string.Equals(parameter1, parameter2, StringComparison.OrdinalIgnoreCase);
        }
    }

La clase que va a contener los m茅todos a medir deber谩 tener la anotaci贸n [MemoryDiagnoser]

Cada m茅todo que va a ser medido deber谩 tener la anotaci贸n [Benchmark]

La medici贸n se ejecuta con la l铆nea: BenchmarkRunner.Run();

Ahora toca correr el proyecto sin depuraci贸n y en modo Release

Y luego de un procesamiento, se muestran los resultados:

A continuaci贸n te explico qu茅 quiere decir cada columna del cuadro de resultados:

  • Method: Esta columna muestra el nombre del m茅todo que se est谩 evaluando en el benchmark.
  • Mean: Muestra el tiempo medio de ejecuci贸n del m茅todo, es decir, el promedio de todas las ejecuciones del m茅todo. Este valor se expresa t铆picamente en unidades de tiempo, como nanosegundos, microsegundos, milisegundos, etc., dependiendo de la escala de tiempo configurada.
  • Error: La columna "Error" muestra el margen de error asociado con la medici贸n del tiempo medio. Este valor representa la desviaci贸n est谩ndar de las mediciones individuales en relaci贸n con el tiempo medio. Un valor m谩s bajo indica mediciones m谩s consistentes y confiables.
  • StdDev: La columna "StdDev" muestra la desviaci贸n est谩ndar de los tiempos de ejecuci贸n individuales del m茅todo. Es una medida de la variabilidad en las mediciones individuales. Un valor m谩s bajo indica una variabilidad menor en los tiempos de ejecuci贸n.
  • Gen 0/1/2: Estas columnas muestran la cantidad de recolecciones de basura de generaci贸n 0, 1 y 2 que ocurrieron durante la ejecuci贸n del m茅todo. Son medidas de la actividad del recolector de basura durante la ejecuci贸n del benchmark.
  • Allocated: Muestra la cantidad de memoria asignada durante la ejecuci贸n del m茅todo, en bytes. Es una medida del uso de memoria del m茅todo.

Las columnas m谩s importantes a revisar para fines de rendimiento son Mean y Allocated.

    El c贸digo de este proyecto de prueba lo encuentras en mi repo.

    Aqu铆 tengo otro ejemplo, en el cual ejecuto la prueba a un web API 馃檶

    Si esta entrada te ha encantado, entonces comp谩rtela crack! 馃憣

    Cr茅ditos de la imagen de portada: Foto de Inspirationfeed en Unsplash

    Un comentario en 芦Pruebas de rendimiento en .NET con BenchmarkDotNet

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *