Benchmark dotnet en toute simplicité

Le benchmark ou test de performance permet – en informatique – de comparer les performances de plusieurs solutions. La méthode la plus simple consiste à utiliser la méthode Stopwatch() mais elle se révèle rapidement limitée. Découvrons BenchmarkDotNet, un framework de benchmark open-source pour dotnet, que j’ai utilisé sur le projet LeetMe. “The quick brown fox jumps over the lazy dog” s’écrit en leet “T#3 qu!(k 8r0w~ f0* jump5 0v3r 7#3 142y d09“. Nous allons voir comment déterminer la méthode qui l’écrit le plus rapidement.

LeetMe remplace des caractères par d’autres en se basant sur un dictionnaire. L’aspect algorithmie (for ascendant, for descendant, foreach) ainsi que l’aspect technique (un tableau, un dictionnaire, une liste) sont amusants mais il faut savoir ce qui fonctionne le mieux. Pour le déterminer, j’ai implémenté chaque possibilité dans une classe distincte.

ArrayInline : tableaux déclarés à la volée dans un tableau

ArrayDefined : tableaux instanciés puis ajoutés dans un tableau

DicoCharArray : tableaux instanciés puis ajoutés dans un dictionnaire

DicoCharList : listes instanciés puis ajoutées dans un dictionnaire

L’objectif est de comparer la rapidité d’exécution et la consommation mémoire de plusieurs méthodes qui réalisent la même tache.

Le code suivant permet de tester et comparer les 4 méthodes décorée par [Benchmark] avec Benchmarkdotnet. Chaque méthode est appelée plusieurs fois afin de pouvoir construire des statistiques correctes sur la moyenne et l’écart de temps d’exécution et sur la consommation de mémoire [MemoryDiagnoser].

 

Lancer en mode Release sinon vous aurez un message d’erreur.

Après un certain temps et beaucoup de ligne dans la fenêtre d’exécution

La présentation de BenchmarkDotNet est maintenant finie. J’espère vous avoir présenter un outil intéressant à l’aide d’un exemple ludique.

Références :

BenchmarkDotNet
LeetMe

Related Post

Logger des événements client avec JSNLog Continuons l'exploration des solutions de log et voyons comment logger des événements client dans une application web. Prenons une application web Ang...
Entity Framework Core 2.2 Preview 2 – donnée... Ca y est, Entity Framework Core supporte les données spatiales avec la sortie de la version 2.2 Preview 2. Regardons comment nous en servir.  Pre-req...
Log tournant et syslog avec Serilog Lors de mon article initial sur Serilog, j'avais utilisé un puits SQL Server pour l'exemple. Le problème est que si la connexion avec SQL est tombée, ...
Utiliser Serilog avec DotNet Core 2.1 Utiliser Serilog avec DotNet Core 2.1 m'a permis de mettre facilement en place des logs dans une application DotNet Core. Par défaut, ils sont écrits ...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *