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.
Exemple d’utilisation
Section intitulée « Exemple d’utilisation »using BenchmarkDotNet.Attributes;using System;using System.Text;
[MemoryDiagnoser] // Montre les allocations GCpublic 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(); }}Sortie console
Section intitulée « Sortie console »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 |Remarques importantes
Section intitulée « Remarques importantes »[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.
Exemple d’utilisation dans le monde réel
Section intitulée « Exemple d’utilisation dans le monde réel »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.