Aller au contenu

Attributs Benchmark et MemoryDiagnoser

Contexte : BenchmarkDotNet fournit des attributs pour contrôler le comportement des benchmarks. [Benchmark] marque une méthode comme benchmark. [MemoryDiagnoser] active la mesure des collectes du garbage collector (Gen0, Gen1, Gen2) et de la mémoire allouée. D’autres attributs utiles incluent [IterationCount], [WarmupCount] et [Params] pour les benchmarks paramétrés.

using BenchmarkDotNet.Attributes;
using System;
using System.Text;
[MemoryDiagnoser] // Montre les allocations GC
public class StringBenchmarks
{
[Benchmark]
public string ConcatStrings()
{
string result = "";
for (int i = 0; i < 100; i++)
{
result += i.ToString();
}
return result;
}
[Benchmark]
public string StringBuilderStrings()
{
var sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
sb.Append(i);
}
return sb.ToString();
}
}
Fenêtre de terminal
dotnet run -c Release
| Method | Mean | Gen0 | Allocated |
|----------------- |---------:|-------:|----------:|
| ConcatStrings | 15.24 us | 12.345 | 45.23 KB |
| StringBuilderStrings | 1.23 us | 0.123 | 1.45 KB |
  • [MemoryDiagnoser] doit être appliqué à la classe.
  • [Params(10, 100, 1000)] peut faire varier les tailles d’entrée.
  • Des attributs comme [ShortRunJob] réduisent le nombre d’itérations pour des tests rapides.

Benchmark de concaténation de chaînes – Utilisez [MemoryDiagnoser] pour voir que StringBuilder alloue bien moins de mémoire que la concaténation avec +.
Voir documentation sur les attributs BenchmarkDotNet.