Eisen: In het ontwikkelproces kunnen dezelfde twee functiemethoden aan onze eisen voldoen, maar om prestatieredenen kiezen we de beste prestatiemethode voor het aanroepen, hoe testen we de prestaties van de code?
Performance benchmarking kan programmeurs helpen de prestaties van twee codefragmenten of methoden te vergelijken, wat een goede kwantificatiestandaard kan bieden voor codeherschrijven of refactoring. Zonder prestatiebenchmarks is het moeilijk voor te stellen hoe je met het blote oog het verschil in prestaties kunt zien wanneer je methode A naar methode B wisselt.
BenchmarkDotNet is een krachtige .Net-prestatiebenchmarkbibliotheek op de officiële websiteDe hyperlink-login is zichtbaar.
Eerst maken we een nieuw .NET Core 3.1 consoleproject. De projectnaam is: BenchmarkTest
Installeer BenchmarkDotNet met het nuget-commando, de code is als volgt:
Dubbelklik op het project om het doelplatform van het project aan te passen, als volgt:
We testen de prestaties van de TestMD5- en TestSHA1-methoden onder respectievelijk de .NET Framework 4.7.2 en .NET Core 3.1 frameworks.
De code is als volgt:
Probeer het uit te voeren met de volgende fout:
Benchmarks valideren: Assembly BenchmarkTest, die benchmarks definieert, is niet-geoptimaliseerd Benchmark is gebouwd zonder optimalisatie ingeschakeld (hoogstwaarschijnlijk een DEBUG-configuratie). Bouw het alsjeblieft in RELEASE. Als je de benchmarks wilt debuggen, zie danDe hyperlink-login is zichtbaar.
Schakel het project over naar RELEASE-modusOm het project opnieuw te starten, zoals hieronder weergegeven:
* Samenvatting *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/november 2018Update/19H2) Intel Core i5-8259U CPU 2,30GHz (Coffee Lake), 1 CPU, 8 logische en 4 fysieke cores .NET Core SDK=5.0.103 [Host]: .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
| Methode | Baan | Speeltijd | Mean | Fout | StdDev | Min | Max | Median | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 VS | 0.0804 VS | 0.1045 VS | 3.958 VS | 4.318 VS | 4.123 VS | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 VS | 0.0793 VS | 0.1085 VS | 3.926 VS | 4.289 VS | 4.003 VS | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 VS | 0.0122 VS | 0.0114 VS | 1.202 VS | 1.238 VS | 1.214 VS | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 VS | 0.0186 VS | 0.0165 VS | 1.284 VS | 1.336 VS | 1.307 VS |
* Hints * Uitschieters TestContext.TestSHA1: .NET 4.7.2 -> 1 uitschieter is verwijderd (5,52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 uitschieter is verwijderd (1.37 us)
* Legendes * Gemiddelde : Rekenkundig gemiddelde van alle metingen Fout: Half van 99,9% betrouwbaarheidsinterval StdDev: Standaarddeviatie van alle metingen Min : Minimaal Max: Maximum Mediaan: Waarde die de bovenste helft van alle metingen scheidt (50e percentiel) 1 us : 1 microseconde (0,0000001 sec)
***** BenchmarkRunner: Einde ***** ** Er waren nog 0 benchmark(s) om te draaien ** Uitvoeringstijd: 00:01:14 (74 sec), uitgevoerde benchmarks: 4
Wereldwijde totale tijd: 00:01:20 (80,63 sec), uitgevoerde benchmarks: 4 * Opruimen van artefacten * Eenmaal uitgevoerd worden de testresultaten opgeslagen in onze projectmap \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, in csv-, html-, md- en andere formaten.
Notitie:De keuze van SimpleJob target frame is onjuist en kan niet correct worden uitgevoerdAls volgt:
Niet in parallel gebouwd, overgestapt op sequentiële build
Weg:De hyperlink-login is zichtbaar.
|