Krav: I utvecklingsprocessen kan samma två funktionsmetoder uppfylla våra krav, men av prestandaskäl väljer vi den bästa prestandametoden för anrop, hur testar vi kodens prestanda?
Prestandabenchmarking kan hjälpa programmerare att jämföra prestandan hos två kodsniptar eller metoder, vilket kan ge en bra kvantifieringsstandard för kodomskrivning eller refaktorering. Utan prestandabenchmarks är det svårt att föreställa sig hur man kan se skillnad i prestanda med blotta ögat när man byter metod A till metod B.
BenchmarkDotNet är ett kraftfullt .Net-prestandabenchmarkbibliotek på den officiella webbplatsenInloggningen med hyperlänken är synlig.
Först skapar vi ett nytt .NET Core 3.1-konsolprojekt. Projektets namn är: BenchmarkTest
Installera BenchmarkDotNet med nuget-kommandot, koden är följande:
Dubbelklicka på projektet för att ändra projektets målplattform, enligt följande:
Vi testar prestandan hos TestMD5- och TestSHA1-metoderna under .NET Framework 4.7.2 respektive .NET Core 3.1-ramverken.
Koden är följande:
Försök att köra det med följande fel:
Validering av riktmärken: Assembly BenchmarkTest, som definierar benchmarks, är icke-optimerad Benchmark byggdes utan optimering aktiverad (troligen en DEBUG-konfiguration). Snälla, bygg det i RELEASE. Om du vill felsöka benchmarkarna, se gärnaInloggningen med hyperlänken är synlig.
Byt projektet till RELEASE-lägeför att starta projektet igen, som visas nedan:
* Sammanfattning *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/november 2018Uppdatering/19H2) Intel Core i5-8259U CPU 2,30GHz (Coffee Lake), 1 CPU, 8 logiska och 4 fysiska kärnor .NET Core SDK=5.0.103 [Värd] : .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
| Metod | Jobb | Speltid | Mean | Fel | StdDev | Min | Max | Median | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | 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 USA | 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 |
* Ledtrådar * Avvikare TestContext.TestSHA1: .NET 4.7.2 -> 1 avvikare togs bort (5,52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 avvikare togs bort (1.37 us)
* Legender * Medelvärde: Aritmetiskt medelvärde av alla mätningar Fel: Hälften av 99,9 % konfidensintervall StdDev: Standardavvikelse för alla mått Min : Minimum Max: Maximum Median: Värde som skiljer den övre halvan av alla mätningar (50:e percentilen) 1 us: 1 mikrosekund (0,000001 sek)
***** BenchmarkRunner: Slut ***** ** Fanns kvar 0 benchmark(ar) att köra ** Körtid: 00:01:14 (74 sek), utförda benchmarks: 4
Total global tid: 00:01:20 (80,63 sek), genomförda benchmarks: 4 * Rensning av föremål * När testresultaten är körda sparas de i vår projektmapp \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, i csv-, html-, md- och andra format.
Not:Val av SimpleJob-målram är felaktigt och kan inte köras korrektFöljande följer:
Misslyckades med att bygga parallellt, bytte till sekventiell version
Resurser:Inloggningen med hyperlänken är synlig.
|