Krav: I udviklingsprocessen kan de samme to funktionsmetoder opfylde vores krav, men af hensyn til ydeevnen vælger vi den bedste ydeevnemetode til kald, hvordan tester vi kodens ydeevne?
Performance benchmarking kan hjælpe programmører med at sammenligne ydeevnen af to kodeuddrag eller metoder, hvilket kan give en god kvantificeringsstandard for kodeomskrivning eller refaktorering. Uden performance-benchmarks er det svært at forestille sig, hvordan man kan se forskel i ydeevne med det blotte øje, når man skifter metode A til metode B.
BenchmarkDotNet er et kraftfuldt .Net-performance-benchmarkbibliotek på den officielle hjemmesideHyperlink-login er synlig.
Først vil vi skabe et nyt .NET Core 3.1 konsolprojekt. Projektets navn er: BenchmarkTest
Installer BenchmarkDotNet med nuget-kommandoen, koden er som følger:
Dobbeltklik på projektet for at ændre projektets målplatform som følger:
Vi tester ydeevnen af TestMD5- og TestSHA1-metoderne under henholdsvis .NET Framework 4.7.2 og .NET Core 3.1 frameworks.
Koden er som følger:
Forsøg at udføre det med følgende fejl:
Validering af benchmarks: Assembly BenchmarkTest, som definerer benchmarks, er ikke-optimeret Benchmark blev bygget uden optimering aktiveret (sandsynligvis en DEBUG-konfiguration). Byg det venligst i RELEASE. Hvis du vil fejlfinde benchmarksene, så se venligstHyperlink-login er synlig.
Skift projektet til RELEASE-tilstandFor at starte projektet igen, som vist nedenfor:
* Resumé *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/november 2018Opdatering/19H2) Intel Core i5-8259U CPU 2,30GHz (Coffee Lake), 1 CPU, 8 logiske og 4 fysiske kerner .NET Core SDK=5.0.103 [Vært]: .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
| Metode | Job | Spilletid | Mean | Fejl | StdDev | Min | Max | Median | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 USA | 0.0804 us | 0.1045 US | 3.958 US | 4.318 us | 4.123 USA | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 USA | 0.0793 us | 0.1085 us | 3,926 US | 4.289 USA | 4.003 USA | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 USA | 0.0122 us | 0.0114 us | 1.202 USA | 1.238 USA | 1.214 USA | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 US | 0.0186 us | 0.0165 us | 1.284 USA | 1.336 USA | 1.307 US |
* Hints * Undtagelser TestContext.TestSHA1: .NET 4.7.2 -> 1 outlier blev fjernet (5,52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 outlier blev fjernet (1.37 us)
* Legender * Middelværdi: Aritmetisk gennemsnit af alle målinger Fejl: Halvdelen af 99,9% konfidensinterval StdDev: Standardafvigelse af alle målinger Min : Minimum Max : Maksimum Median: Værdi, der adskiller den øverste halvdel af alle målinger (50. percentil) 1 us: 1 mikrosekund (0,000001 sek)
***** BenchmarkRunner: Slut ***** ** Der var stadig 0 benchmark(e) at køre ** Kørselstid: 00:01:14 (74 sek), udførte benchmarks: 4
Global samlet tid: 00:01:20 (80,63 sek), udførte benchmarks: 4 * Oprydning af artefakter * Når testresultaterne er udført, gemmes de i vores projektmappe \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, i csv-, html-, md- og andre formater.
Seddel:Valget af SimpleJob-målramme er forkert og kan blive udført forkert korrektSom følger:
Mislykkedes i at bygge parallelt, skiftede til sekventiel build
Ressourcer:Hyperlink-login er synlig.
|