Analisar dados do BenchmarkDotNet no Visual Studio

Você pode usar as ferramentas de criação de perfil para coletar e exibir dados de BenchmarkDotNet no Visual Studio.

Quando você adiciona um diagnosticador BenchmarkDotNet às suas classes de parâmetro de comparação como um atributo, um arquivo .diagsession é gerado após a execução do parâmetro de comparação. Em seguida, você pode abrir o arquivo .diagsession no Visual Studio e exibir dados de criação de perfil para os benchmarks.

Os seguintes diagnosticadores são aceitos:

  • CPUUsageDiagnoser
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Cada diagnosticador gera dados de desempenho relacionados ao próprio diagnosticador. Por exemplo, CPUUsageDiagnoser gera um arquivo .diagsession com dados da CPU, enquanto DatabaseDiagnoser gera um arquivo .diagsession com dados sobre operações de banco de dados. As limitações correspondem à ferramenta de criação de perfil associada. Por exemplo, a ferramenta de banco de dados do criador de perfil funciona em ADO.NET ou no Entity Framework Core.

Pré-requisitos

Coletar dados de Benchmark.NET

  1. Crie um projeto de console.

    As funções de parâmetros de comparação devem ser adicionadas a um aplicativo de console .NET. Essas funções podem ser do tipo wrapper, que fazem referência a outros tipos de projeto.

  2. Defina sua compilação para uma compilação de lançamento em vez de uma compilação de depuração.

  3. Atribua seu código para diagnosticadores e parâmetros de comparação e inclua código para executar os benchmarks (BenchmarkRunner.Run).

    Adicione o nome do diagnosticador como um atributo à classe que contém os parâmetros de comparação para os quais você deseja gerar dados.

    Por exemplo, você pode usar o código a seguir para o CPUUsageDiagnoser.

    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);
            }
        }
    }
    
  4. Execute o aplicativo para gerar o arquivo .diagsession.

    Verifique a saída do console para obter o local do arquivo. Por exemplo:

    // * Diagnostic Output - VSDiagnosticsDiagnoser * 
    Collection result moved to 'BenchmarkDotNet_Md5VsSha256_20231218_123326.diagsession'.
    Session : {7f38bcc2-c692-4266-aa24-b12bc5325ea4}
      Stopped
    Exported diagsession file: *.diagsession
    

Exibir dados do Benchmark. NET

  1. No Visual Studio, selecione Arquivo > Abrir > Arquivo, navegue até o local do arquivo .diagsession e selecione e abra o arquivo.

  2. Selecione a guia Parâmetro de comparação para exibir dados do BenchmarkDotNet.

    Captura de tela dos dados do BenchmarkDotNet no Visual Studio.

Para obter mais informações, consulte a documentação do BenchmarkDotNet.