O que é BenchmarkDotNet e para que serve?
\n\nBenchmarkDotNet é 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\nPara 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
- 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
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\nInstalação do BenchmarkDotNet
\n\nA 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\n1. Através do .NET CLI (recomendado)
\nAbra o terminal na pasta raiz do seu projeto e execute o comando:
\ndotnet add package BenchmarkDotNet\n\n2. Através do Package Manager Console no Visual Studio
\nAbra o menu Tools -> NuGet Package Manager -> Package Manager Console e execute:
Install-Package BenchmarkDotNet\n\n3. Através da interface gráfica do NuGet no Visual Studio
\nClique com o botão direito no projeto no Solution Explorer, selecione "Manage NuGet Packages", encontre "BenchmarkDotNet" e clique em "Install".
\n\nImportante: 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\nInício rápido com exemplo de código
\n\nVamos escrever um benchmark simples que compara duas formas de concatenação de strings: através do operador + e através do StringBuilder.
1. Crie um novo projeto de console .NET: dotnet new console -n MyBenchmark.
2. Instale a biblioteca: dotnet add package BenchmarkDotNet.
3. Substitua o conteúdo do arquivo Program.cs pelo seguinte código:
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 Também na biblioteca
remeda para TypeScript: guia completo com exemplos práticos
Filas de tarefas em Node.js: Bull, Bee-Queue, Kue e implementação em Redis
Validação de dados em Go: visão geral de bibliotecas e abordagens
Guia completo Ramsey/UUID para PHP: instalação e exemplos