Partilhar via


Analisar dados BenchmarkDotNet no Visual Studio

Você pode usar as ferramentas de criação de perfil para coletar e exibir dados BenchmarkDotNet no Visual Studio. O BenchmarkDotNet é uma biblioteca .NET open-source concebida para benchmarking de desempenho. Automatiza o processo de medir e comparar o tempo de execução, o uso de memória e outras métricas de desempenho do seu código .NET de forma fiável e repetível.

Usa o BenchmarkDotNet instalando os pacotes NuGet necessários no seu projeto e depois adicionando atributos ao seu código que correspondam ao tipo de informação de desempenho que lhe interessa.

Pré-requisitos

Configure o seu projeto

Os atributos de benchmark devem ser adicionados a uma aplicação de consola .NET. Os atributos podem ser adicionados a funções de wrapper que referenciam outros tipos de projeto.

Para preparar o seu projeto para suporte ao BenchmarkDotNet, utilize um dos seguintes métodos:

  • Abra um projeto de consola existente ou crie um novo projeto de consola. Neste cenário, adiciona-se manualmente suporte ao BenchmarkDotNet.

  • Use o modelo Benchmark Project . Algumas das etapas descritas neste artigo são necessárias somente quando você adiciona manualmente o suporte a BenchmarkDotNet.

    O modelo Benchmark Project gera um projeto BenchmarkDotNet totalmente integrado com suporte integrado para criação de perfil de uso da CPU e insights do Copilot. Para usar o modelo, selecione Criação de perfil na lista de tipos de projeto ao criar um novo projeto e escolha Projeto de referência. Para informações sobre atributos, consulte Atribuir o seu código.

Captura de tela do modelo BenchmarkDotNet no Visual Studio.

Crie um projeto de consola ou use um projeto de consola já existente.

Os atributos de benchmark devem ser adicionados a uma aplicação de consola .NET. Os atributos podem ser adicionados a funções de wrapper que referenciam outros tipos de projeto.

Atribua o teu código

Quando adicionas um diagnóstico BenchmarkDotNet às tuas classes de benchmark como um atributo, configuras a aplicação para gerar um ficheiro .diagsession após a execução dos benchmarks. Depois podes abrir o ficheiro .diagsession no Visual Studio e visualizar os dados de perfil para os benchmarks.

Os seguintes diagnosticadores são suportados:

  • Diagnóstico de Uso da CPU
  • Diagnosticador de Base de Dados
  • DotNetCountersDiagnoser
  • EventsDiagnoser
  • FileIODiagnoser

Cada diagnosticador gera dados de desempenho relacionados a esse diagnosticador. Por exemplo, o CPUUsageDiagnoser gera um arquivo .diagsession com dados da CPU e o 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 Database do criador de perfil funciona em ADO.NET ou Entity Framework Core.

Para atribuir o seu código em ferramentas de diagnóstico e referências de desempenho:

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

  2. Adiciona o Benchmark atributo aos métodos que queres testar para desempenho.

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

    Se você estiver usando o modelo Projeto de Benchmark , o código de exemplo já é fornecido no modelo. Se você estiver adicionando manualmente o suporte a BenchmarkDotNet, poderá usar o código de exemplo a seguir.

    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);
            }
        }
    }
    

Recolha e visualize Benchmark.NET dados

  1. Define a tua build para Release em vez de Debug.

  2. Execute o aplicativo para gerar o arquivo .diagsession .

    Verifique a saída do console para obter a localização 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
    
  3. No Visual Studio, selecione Arquivo > Abrir > Arquivo e navegue até o local do arquivo .diagsession e, em seguida, selecione e abra o arquivo.

  4. Selecione o separador "Benchmarks" para visualizar os dados dos benchmarks do BenchmarkDotNet.

    Captura de ecrã de dados BenchmarkDotNet no Visual Studio.

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

  5. Clique com o botão direito do mouse em uma linha nos resultados e escolha Selecionar intervalo de tempo para sincronizar o gráfico da linha do tempo com o benchmark.

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

    Dependendo do diagnosticador usado para coletar dados, você pode obter informações relacionadas à alocação de memória, uso da CPU, contadores e 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 Diagnosticadores.

    Observação

    O profiler suporta apenas o [MemoryDiagnoser] e os 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 with Visual Studio Profiler.

    Para analisar dados relacionados a outras guias, como Uso da CPU, consulte os artigos correspondentes na documentação de análise de desempenho.

Otimize com o Copilot

Você pode acionar otimizações de alocação de CPU e memória para seus benchmarks BenchmarkDotNet diretamente do editor usando o CodeLens. Isso torna o ajuste de desempenho mais acessível e perfeito, ajudando você a encontrar e corrigir problemas de alocação de CPU e memória exatamente onde você codifica.

Selecione o indicador CodeLens acima do seu benchmark e, em seguida, selecione a opção Otimizar alocações com o Copilot.

Captura de tela da otimização com o Copilot.