Krav: I utviklingsprosessen kan de samme to funksjonsmetodene oppfylle kravene våre, men av ytelseshensyn velger vi den beste ytelsesmetoden for kall, hvordan tester vi ytelsen til koden?
Ytelsesbenchmarking kan hjelpe programmerere med å sammenligne ytelsen til to kodesnippets eller metoder, noe som kan gi en god kvantififikasjonsstandard for kodeomskriving eller refaktorering. Uten ytelsesbenchmarks er det vanskelig å forestille seg hvordan du kan se forskjell i ytelse med det blotte øye når du bytter metode A til metode B.
BenchmarkDotNet er et kraftig .Net-ytelsesreferansebibliotek på den offisielle nettsidenInnloggingen med hyperkoblingen er synlig.
Først skal vi lage et nytt .NET Core 3.1-konsollprosjekt. Prosjektnavnet er: BenchmarkTest
Installer BenchmarkDotNet med nuget-kommandoen, koden er som følger:
Dobbeltklikk på prosjektet for å endre målplattformen til prosjektet, som følger:
Vi tester ytelsen til TestMD5- og TestSHA1-metodene under henholdsvis .NET Framework 4.7.2 og .NET Core 3.1-rammeverkene.
Koden er som følger:
Prøv å utføre det med følgende feil:
Validering av referansepunkter: Assembly BenchmarkTest, som definerer benchmarks, er ikke-optimalisert Benchmark ble bygget uten optimalisering aktivert (mest sannsynlig en DEBUG-konfigurasjon). Vær så snill, bygg det i RELEASE. Hvis du vil feilsøke benchmarkene, se gjerneInnloggingen med hyperkoblingen er synlig.
Bytt prosjektet til RELEASE-modusFor å starte prosjektet på nytt, som vist nedenfor:
* Sammendrag *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/november 2018Oppdatering/19H2) Intel Core i5-8259U CPU 2,30GHz (Coffee Lake), 1 CPU, 8 logiske og 4 fysiske kjerner .NET Core SDK=5.0.103 [Vert] : .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 | Jobb | Kjøretid | Mean | Feil | 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 USA | 0.0793 US | 0.1085 US | 3,926 US | 4.289 US | 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 US | 1.214 USA | | 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 |
* Hint * Unntak TestContext.TestSHA1: .NET 4.7.2 -> 1 avviker ble fjernet (5,52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 avvikere ble fjernet (1.37 us)
* Legender * Gjennomsnitt: Aritmetisk gjennomsnitt for alle målinger Feil: Halvparten av 99,9 % konfidensintervall StdDev: Standardavvik for alle målinger Min : Minimum Max: Maksimum Median: Verdi som skiller den øvre halvdelen av alle målinger (50. persentil) 1 us: 1 mikrosekund (0,000001 sek)
***** BenchmarkRunner: Slutt ***** ** Var fortsatt 0 benchmark(er) å kjøre ** Kjøretid: 00:01:14 (74 sek), utførte benchmarks: 4
Global total tid: 00:01:20 (80,63 sek), utførte benchmarks: 4 * Opprydding av gjenstander * Når testresultatene er utført, lagres de i prosjektet vårt \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results-mappe, i csv-, html-, md- og andre formater.
Notat:Valg av SimpleJob-målramme er feil og kan hende det ikke utføres riktigSom følger:
Klarte ikke å bygge parallelt, byttet til sekvensiell bygging
Ressurser:Innloggingen med hyperkoblingen er synlig.
|