Exigences : Dans le processus de développement, les deux mêmes méthodes de fonctions peuvent répondre à nos exigences, mais pour des raisons de performance, nous choisirons la meilleure méthode de performance pour appeler, comment tester la performance du code ?
Le benchmarking des performances peut aider les programmeurs à comparer la performance de deux extraits de code ou méthodes, ce qui peut constituer une bonne norme de quantification pour la réécriture ou la refactorisation du code. Sans benchmarks de performance, il est difficile d’imaginer comment on peut distinguer la performance à l’œil nu lorsqu’on change la méthode A vers la méthode B.
BenchmarkDotNet est une puissante bibliothèque de benchmarks de performance .Net sur le site officielLa connexion hyperlientérée est visible.
Tout d’abord, nous allons créer un nouveau projet console .NET Core 3.1. Le nom du projet est : BenchmarkTest
Installez BenchmarkDotNet en utilisant la commande nuget, le code est le suivant :
Double-cliquez sur le projet pour modifier la plateforme cible du projet, comme suit :
Nous testons les performances des méthodes TestMD5 et TestSHA1 sous les frameworks .NET Framework 4.7.2 et .NET Core 3.1, respectivement.
Le code est le suivant :
Tentez de l’exécuter avec l’erreur suivante :
Validation des benchmarks : Assembly BenchmarkTest qui définit les benchmarks n’est pas optimisé Benchmark a été construit sans optimisation activée (très probablement une configuration DEBUG). S’il vous plaît, intégrez-le dans RELEASE. Si vous souhaitez déboguer les benchmarks, veuillez consulterLa connexion hyperlientérée est visible.
Passer le projet en mode RELEASEPour relancer le projet, comme montré ci-dessous :
* Résumé *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/novembre 2018Mise à jour/19H2) Intel Core i5-8259U CPU 2,30GHz (Coffee Lake), 1 CPU, 8 cœurs logiques et 4 cœurs physiques .NET Core SDK=5.0.103 [Hôte] : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT .NET 4.7.2 : .NET Framework 4.8 (4.8.4300.0), X64 RyuJIT .NET Core 3.1 : .NET Core 3.1.12 (CoreCLR 4.700.21.6504, CoreFX 4.700.21.6905), X64 RyuJIT
| Méthode | Job | Durée | Mean | Erreur | StdDev | Min | Max | Médiane | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 US | 0.0804 US | 0,1045 us | 3.958 US | 4.318 US | 4.123 US | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 US | 0,0793 US | 0.1085 US | 3.926 US | 4.289 US | 4.003 US | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 US | 0.0122 US | 0.0114 US | 1.202 US | 1.238 US | 1.214 US | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 US | 0,0186 US | 0,0165 US | 1.284 US | 1.336 US | 1.307 US |
* Indices * Cas particuliers TestContext.TestSHA1 : .NET 4.7.2 -> 1 outlier a été supprimé (5.52 us) TestContext.TestSHA1 : .NET Core 3.1 -> 1 cas aberrant a été supprimé (1.37 us)
* Légendes * Moyenne : Moyenne arithmétique de toutes les mesures Erreur : moitié de l’intervalle de confiance à 99,9 % Développement standard : écart-type de toutes les mesures Min : Minimum Max : Maximum Médiane : Valeur séparant la moitié supérieure de toutes les mesures (50e percentile) 1 US : 1 microseconde (0,000001 sec)
***** BenchmarkRunner : Fin ***** ** Resté 0(s) benchmark(s) à exécuter ** Durée : 00:01:14 (74 s), benchmarks exécutés : 4
Temps total global : 00:01:20 (80,63 s), benchmarks exécutés : 4 * Nettoyage des artefacts * Une fois exécutés, les résultats du test sont sauvegardés dans notre dossier projet \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, sous forme de csv, html, md et d’autres formats.
Note:La sélection de trame cible par SimpleJob est incorrecte et peut ne pas s’exécuter correctementComme suit:
Échec de compilation en parallèle, passage à la compilation séquentielle
Ressources:La connexion hyperlientérée est visible.
|