
Niveau :


7 minutes de lecture
Dans cet article, vous allez apprendre à utiliser BenchmarkDotNet pour générer des statistiques de performances pour vos applications Microsoft .Net :
- Pourquoi est-il important de « benchmarké » nos applications ?
- Prérequis
- Configuration de BenchmarkDotNet
- Démonstration d’un benchmark
- Analyse d’un benchmark
Pourquoi est-il important de « benchmarké » nos applications ?
La phase de benchmark d’une application permet de mesurer et dresser un état des lieux de l’application. Les données générées permettent ainsi de voir dans la globalité, la qualité de performance de notre application et surtout d’alerter sur les éléments qui mériteraient une revue pour améliorer les indicateurs.
Vous trouverez plus d’information sur l’ouvrage Pro .NET Benchmarking qui utilise BenchmarkDotNet :

Prérequis
- Un projet Console ou autre
Configuration de BenchmarkDotNet
Dans le fichier program.cs, créons une nouvelle classe avec deux méthodes permettant de concaténer des chaines de caractères (l’une avec la concaténation arithmétique et l’autre utilisant la classe StringBuilder) comme ci-dessous :
public class ConcatenationStrings
{
public string ArithmeticConcatenationString()
{
var result = string.Empty;
for (int i = 0; i < 1000; i++)
{
result += i.ToString();
}
return result;
}
public string StringBuilderConcatenationString()
{
var result = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
result.Append(i);
}
return result.ToString();
}
}
Installez le package BenchmarkDotNet et configurez la class Program.cs comme ci-dessous :
Les attributs ci-dessus permettent de définir quels seront les classes et méthodes soumises à analyse par le benchmark.
Démonstration d’un benchmark
Complétons notre classe program.cs pour indiquer les benchmarks à exécuter :
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text;
var summary = BenchmarkRunner.Run<ConcatenationStrings>();
Console.ReadLine();
Si vous exécutez le code ainsi vous aurez un message d’erreur vous indiquant que les benchmarks doivent être fait en mode Release :

Passons donc l’application en Release et relançons le programme sans le debugger :

Une fois tous les benchmarks effectués, BenchmarkDotNet affiche le résultat des méthodes analysés sous la forme d’un tableau :

On retrouve bien nos deux méthodes analysés et différentes valeurs dont la description est en bleu en dessous du tableau.
Analyse d’un benchmark
Les statistiques remontées sont exprimés en microsecondes. On retrouve le temps moyen des appels, des erreurs, le nombre total de collections par génération et la consommation en bytes des générations.
Et la quel surprise de voir que pour nos deux méthodes faisant la même chose, la concaténation arithmétique (celle que nous faisons souvent par habitude) dure 40 fois plus de temps que celle avec un StringBuilder. Quand a la charge mémoire, elle est a peu près 200 fois plus consommatrice.
Vous pouvez retrouver les résultats dans le répertoire de génération du projet sous la forme d’un fichier html ou csv et vous pouvez même exporter plus de statistiques sous d’autres formats a l’aide de la classe exporter :

Il devient alors facile de faire toutes sortes de graphiques pour vos documents d’analyse :



