Quando usar um microbenchmark
Use-o para responder uma pergunta delimitada: duas implementações fazem o mesmo trabalho? Qual aloca menos? Como o custo muda conforme o tamanho da entrada? A ferramenta é adequada para métodos isolados e cenários repetíveis, não para inferir sozinha a latência de um endpoint com rede, banco, autenticação e concorrência.
Comece pelo método prático de performance em .NET: encontre primeiro um gargalo plausível. Medir muitos trechos sem uma pergunta aumenta ruído e pode levar a otimizar algo irrelevante.
Configure uma comparação equivalente
Adicione o pacote BenchmarkDotNet ao projeto de benchmark e compare métodos que produzem o mesmo resultado com os mesmos dados. O exemplo mede soma com loop e LINQ e varia o tamanho de entrada:
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Linq;
BenchmarkRunner.Run<SomaBenchmarks>();
[MemoryDiagnoser]
public class SomaBenchmarks
{
[Params(10, 1_000)]
public int Quantidade { get; set; }
[Benchmark(Baseline = true)]
public long Loop()
{
long total = 0;
for (var valor = 1; valor <= Quantidade; valor++)
{
total += valor;
}
return total;
}
[Benchmark]
public long Linq()
{
return Enumerable.Range(1, Quantidade).Sum(valor => (long)valor);
}
}
Os métodos retornam o resultado para que o trabalho seja observável pelo harness. [MemoryDiagnoser] acrescenta informações de alocação por operação; ele não substitui profiling de memória da aplicação.
Execute em condições adequadas
- Rode a configuração Release, fora do depurador e sem trabalho concorrente significativo na máquina.
- Deixe o BenchmarkDotNet fazer aquecimento e múltiplas iterações; evite inserir manualmente cronômetros em loops.
- Use parâmetros que representem entradas pequenas, típicas e grandes, sem misturar preparação de dados com a operação medida.
- Registre versão do runtime, configuração, hardware e commit. Repita se o resultado for inesperado.
- Evite I/O externo variável no benchmark. Para banco ou HTTP, prefira medir cenários de integração próprios e instrumentados.
Leia a tabela sem exagerar conclusões
Compare média e dispersão, unidades e coluna de alocação. A razão relativa ao baseline facilita a comparação dentro daquele experimento; não significa que a aplicação inteira ficou aquele percentual mais rápida. Diferenças pequenas podem estar dentro da variação da máquina, e uma opção mais rápida pode consumir mais memória ou ser mais difícil de manter.
Não use um único resultado para declarar vitória. Verifique se os métodos fazem o mesmo trabalho, se a entrada está representativa e se a mudança também melhora a métrica de produto que motivou o experimento.
Microbenchmark versus carga real
BenchmarkDotNet compara métodos controlados. k6 modela tráfego HTTP e thresholds; traces e métricas mostram onde o tempo é gasto em um serviço em execução. Use cada ferramenta para a pergunta apropriada e conecte resultados ao mesmo cenário sempre que possível.