Transformer les méthodes en repères

Le benchmarking est un sujet de plus en plus courant en développement car il permet aux entreprises de mesurer les performances de leurs applications, notamment lorsque de nouvelles fonctionnalités sont ajoutées. Découvrez dans cet article comment implémenter l’analyse comparative dans une application .NET.
Lors de la mise en œuvre de nouvelles fonctions dans un système, il est crucial de vérifier les performances de l’application dans son ensemble pour voir si les modifications apportées au code ont amélioré ou dégradé les performances. Pour aider le développeur dans cette analyse, il existe d’excellents outils faciles à mettre en œuvre et dotés de nombreuses fonctionnalités.
Dans cet article, nous verrons une brève introduction au concept de benchmarking et nous mettrons en pratique une application appliquant l’analyse de performance via la bibliothèque BenchmarkDotNet.
Concept d’analyse comparative
Le terme « benchmark » en informatique est l’action d’exécuter un programme informatique, un ensemble de programmes ou d’autres opérations dans le but d’évaluer les performances relatives d’un objet, généralement en exécutant une série de tests standard sur celui-ci.
Normalement, l’analyse comparative est associée à l’évaluation des performances du matériel informatique, mais dans de nombreux cas, cette technique est également applicable aux logiciels. Les benchmarks logiciels peuvent être trouvés dans les compilateurs, l’exécution logique ou les systèmes de gestion de bases de données.
Pourquoi l’analyse comparative est-elle utile ?
L’implémentation d’un benchmark dans un système nous permet d’avoir une analyse détaillée des performances et d’assurer des résultats fiables et précis.
Dans ce contexte, lors du développement d’une application, nous pouvons être amenés à effectuer des contrôles de performance dans l’exécution du logiciel. Pour aider à cette tâche, l’utilisation du benchmarking devient indispensable, nous avons donc accès aux métriques de performance des méthodes, en plus de pouvoir vérifier si les modifications apportées au code ont amélioré ou détérioré les performances.
Bibliothèque BenchmarkDotNet
L’un des avantages de la programmation en .NET est la grande variété de bibliothèques NuGet disponibles pour tous les besoins. Dans le contexte de l’analyse comparative, il existe un excellent outil pour aider les développeurs à travailler : BenchmarkDotNet bibliothèque.
BenchmarkDotNet est une bibliothèque légère, open-source et très puissante qui peut transformer vos méthodes en benchmarks, suivre les performances et partager les données capturées, où tout se fait de manière simple et conviviale.
Implémentation de BenchmarkDotNet dans une application .NET
Pour démontrer l’utilisation de BenchmarkDotNet, nous allons créer une application console simple, implémenter certaines méthodes, exécuter l’application et vérifier l’analyse effectuée par BenchmarkDotNet.
Vous pouvez accéder au code source complet du projet final à ce lien : code source.
Donc, pour créer l’application de base, exécutez la commande suivante dans la console :
dotnet new console -n BenchmarkConceptApp
Ensuite, vous pouvez ouvrir le projet avec votre IDE préféré. Dans cet article, nous utiliserons Visual Studio 2022.
Ajout de dépendances BenchmarkDotNet
Ajoutons d’abord la dépendance de la librairie « BenchmarkDotNet ». Pour cela, double-cliquez sur le projet (BenchmarkConceptApp.csproj) et ajoutez le code ci-dessous :
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.1" />
</ItemGroup>
Puis reconstruisez la solution. De cette façon, nous avons déjà les dépendances nécessaires pour implémenter le benchmark.
Création de la classe et des méthodes
Dans le projet, créez une nouvelle classe appelée « CryptoComparison », puis remplacez le code généré par le code ci-dessous :
using BenchmarkDotNet.Attributes;
using System.Security.Cryptography;
namespace BenchmarkConceptApp
{
[RankColumn]
[MemoryDiagnoser]
public class CryptoComparison
{
private const int itemQuantity = 10000;
private readonly byte[] data;
private readonly SHA256 sha256 = SHA256.Create();
private readonly MD5 md5 = MD5.Create();
public CryptoComparison()
{
data = new byte[itemQuantity];
new Random(42).NextBytes(data);
}
[Benchmark]
public byte[] Sha256() => sha256.ComputeHash(data);
[Benchmark]
public byte[] Md5() => md5.ComputeHash(data);
}
}
Dans cette classe, nous ajoutons deux attributs : RankColumn
et MemoryDiagnoser
.
RankColumn
– Crée une colonne appelée « Rang », qui indiquera quelles étaient les méthodes les plus rapides et les plus lentes lors de la génération des résultats.MemoryDiagnoser
– Effectue des diagnostics d’allocation de mémoire lors de l’exécution du code.
Nous avons également ajouté des variables avec des valeurs aléatoires et deux méthodes qui calculent la valeur de hachage pour le tableau d’octets spécifié, aux formats SHA256 et MD5.
Configuration de la classe de programme
La dernière étape consiste à configurer l’initialisation de l’application afin que la classe qui contient les méthodes précédemment créées soit exécutée et analysée par le Benchmark. C’est très simple, il suffit d’ajouter le code ci-dessous dans le Program
classer.
using BenchmarkConceptApp;
using BenchmarkDotNet.Running;
BenchmarkRunner.Run<CryptoComparison>();
La seule configuration que nous avons faite était d’ajouter le Benchmark
classe chargée d’exécuter « BenchmarkRunner », appelant la méthode « Run » et passant en paramètre la classe qui contient les méthodes à analyser.
Exécution de BenchmarkRunner
Maintenant, tout est prêt pour que nous puissions exécuter le code et vérifier les résultats obtenus. Pour ce faire, exécutez simplement les commandes ci-dessous dans le terminal, à l’intérieur du dossier racine du projet.
dotnet run -project BenchmarkConceptApp.csproj -c Release
Notez qu’avec cette commande, nous exécutons l’application en mode « Release » car BenchmarkDotNet exige qu’il en soit ainsi pour pouvoir effectuer l’analyse. S’il est exécuté en mode débogage, une erreur sera générée. En effet, en mode release, le compilateur C# effectue certaines optimisations qui ne sont pas disponibles en mode débogage.
Ensuite, le traitement de l’analyse sera effectué, ce qui peut prendre quelques minutes. À la fin de l’exécution, nous aurons les résultats suivants affichés dans le terminal :
Comme on peut le voir dans le tableau des résultats, la méthode la plus rapide était Md5, qui dans la moyenne arithmétique (colonne moyenne) ne prenait que 17,54 us (microsecondes) contre 40,29 us pour la méthode Sha256. Il est également possible de confirmer lequel a été le plus rapide grâce à la colonne « Rang », qui montre que Md5 était à la première place.
BenchmarkDotNet générera également des fichiers journaux et HTML avec les résultats dans un dossier appelé « BenchmarkDotNet.Artifacts » à la racine du projet.
Conclusion
Dans cet article, nous avons vu le concept de benchmarking et comment il s’intègre parfaitement dans le développement logiciel dans l’univers .NET. Nous avons également créé une application pour tester la bibliothèque BenchmarkDotNet dans la pratique. Nous avons vu que BenchmarkDotNet possède de nombreuses fonctionnalités pour faciliter le développement et l’analyse des performances des données.
Pour une couverture complète de toutes les fonctionnalités de cette bibliothèque, je vous suggère de lire le Documentation sur le site officiel. Il existe de nombreuses ressources qui peuvent vous aider à résoudre les problèmes quotidiens.
Source link