BenchmarkDotNet para C# (.NET): guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é BenchmarkDotNet e para que serve?

\n\n

BenchmarkDotNet é uma biblioteca poderosa, multiplataforma e de código aberto para .NET, projetada para medir com precisão o desempenho do código (benchmarking). No mundo do desenvolvimento de software, surge frequentemente a necessidade de comparar duas ou mais abordagens para resolver um problema: qual algoritmo de ordenação é mais rápido, qual forma de formatar strings é mais eficiente, como o uso de diferentes estruturas de dados afeta a velocidade da aplicação. O BenchmarkDotNet resolve esse problema em nível profissional.

\n\n

Para que serve? A medição manual do tempo usando Stopwatch está sujeita a vários erros: influência de processos em segundo plano da compilação JIT, coleta de lixo (GC), aquecimento do cache da CPU e imprecisões do temporizador do sistema. O BenchmarkDotNet executa automaticamente:

\n
    \n
  • Aquecimento (Warmup): Executa o código várias vezes antes da medição para que o compilador JIT e o cache da CPU entrem em um estado estável.
  • \n
  • Múltiplas execuções (Iterações): Executa o método muitas vezes e coleta estatísticas.
  • \n
  • Análise estatística: Calcula média, mediana, desvio padrão, tempo mínimo e máximo.
  • \n
  • Isolamento: Executa cada benchmark em um processo separado para minimizar a influência de outros testes.
  • \n
  • Diagnóstico: Pode medir não apenas o tempo, mas também a alocação de memória (Allocated), o número de coletas de lixo (GC Collections) e outras métricas.
  • \n
\n

Sem o BenchmarkDotNet, você corre o risco de obter resultados não confiáveis e tirar conclusões incorretas sobre a otimização do código.

\n\n

Instalação do BenchmarkDotNet

\n\n

A instalação da biblioteca BenchmarkDotNet em um projeto .NET (C#, F#, VB.NET) é feita através do gerenciador de pacotes NuGet. Existem três formas principais:

\n\n

1. Através do .NET CLI (recomendado)

\n

Abra o terminal na pasta raiz do seu projeto e execute o comando:

\n
dotnet add package BenchmarkDotNet
\n\n

2. Através do Package Manager Console no Visual Studio

\n

Abra o menu Tools -> NuGet Package Manager -> Package Manager Console e execute:

\n
Install-Package BenchmarkDotNet
\n\n

3. Através da interface gráfica do NuGet no Visual Studio

\n

Clique com o botão direito no projeto no Solution Explorer, selecione "Manage NuGet Packages", encontre "BenchmarkDotNet" e clique em "Install".

\n\n

Importante: Para funcionar corretamente, a biblioteca exige que o projeto seja compilado na configuração Release. A configuração Debug não otimiza o código, o que resultará em resultados distorcidos.

\n\n

Início rápido com exemplo de código

\n\n

Vamos escrever um benchmark simples que compara duas formas de concatenação de strings: através do operador + e através do StringBuilder.

\n\n

1. Crie um novo projeto de console .NET: dotnet new console -n MyBenchmark.

\n

2. Instale a biblioteca: dotnet add package BenchmarkDotNet.

\n

3. Substitua o conteúdo do arquivo Program.cs pelo seguinte código:

\n\n
using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Running;\nusing System.Text;\n\npublic class StringConcatenationBenchmark\n{\n    private const int N = 1000; // Número de iterações dentro do método\n\n    [Benchmark]\n    public string UsingPlusOperator()\n    {\n        string result = "";\n        for (int i = 0; i < N; i++)\n        {\n            result = result + "a";\n        }\n        return result;\n    }\n\n    [Benchmark]\n    public string UsingStringBuilder()\n    {\n        StringBuilder sb = new StringBuilder();\n        for (int i = 0; i < N; i++)\n        {\n            sb.Append("a");\n        }\n        return sb.ToString();\n    }\n}\n\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        var summa                    

Recommendations