Compartilhar via


Analisar dados do BenchmarkDotNet no Visual Studio

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

Quando você adiciona um diagnosticador BenchmarkDotNet às 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 a .diagsession no Visual Studio e exibir dados de criação de perfil para os parâmetros de comparação.

Há suporte para os seguintes diagnósticos:

  • CPUUsageDiagnoser
  • DatabaseDiagnoser
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Cada diagnosticador gera dados de desempenho relacionados a esse diagnosticador. Por exemplo, o CPUUsageDiagnoser gera um arquivo .diagsession com dados de CPU e o DatabaseDiagnoser gera um arquivo .diagsession com dados em operações de banco de dados. As limitações correspondem à ferramenta de criação de perfil associada. Por exemplo, a ferramenta Banco de Dados do criador de perfil funciona no 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âmetro de comparação devem ser adicionadas a um aplicativo de console do .NET. Essas funções podem ser funções wrapper que fazem referência a outros tipos de projeto.

  2. Defina o build para um build de versão em vez de um build de depuração.

  3. Atribua seu código para diagnósticos e parâmetros de comparação e inclua código para executar os parâmetros de comparação (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 BenchmarkDotNet

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

  2. Selecione a guia Parâmetros de Comparação para exibir dados para os parâmetros de comparação BenchmarkDotNet.

    Captura de tela dos dados do BenchmarkDotNet no Visual Studio.

    Para obter mais informações sobre os resultados na guia Benchmarks , consulte a documentação do BenchmarkDotNet .

  3. Clique com o botão direito do mouse em uma linha nos resultados e escolha Selecionar intervalo de tempo para sincronizar o grafo da linha do tempo com o parâmetro de comparação.

  4. Selecione uma das guias disponíveis, como Uso da CPU ou Alocações.

    Dependendo do diagnosticador usado para coletar dados, você pode obter insights relacionados à alocação de memória, ao uso da CPU, aos contadores e a outros dados de desempenho. Para analisar alocações de memória, use o MemoryDiagnoser interno adicionando o atributo [MemoryDiagnoser]. Para obter mais informações, consulte Diagnosticers.

    Observação

    O criador de perfil dá suporte apenas ao [MemoryDiagnoser] e aos diagnosticadores listados anteriormente neste artigo.

    Para obter um exemplo de como usar o criador de perfil para analisar alocações de memória, consulte a postagem de blog Benchmarking com o Visual Studio Profiler.

    Para analisar dados relacionados a outras guias, como uso da CPU, consulte os artigos correspondentes na documentação de criação de perfil.