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.

Documentação e leituras relacionadas