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 *