Cerințe: În procesul de dezvoltare, aceleași două metode funcționale pot îndeplini cerințele noastre, dar din motive de performanță, vom alege cea mai bună metodă de performanță pentru apelare, cum să testăm performanța codului?
Benchmarking-ul performanței poate ajuta programatorii să compare performanța a două fragmente de cod sau metode, ceea ce poate oferi un bun standard de cuantificare pentru rescrierea sau refactorizarea codului. Fără benchmark-uri de performanță, este greu de imaginat cum poți face diferența de performanță cu ochiul liber când schimbi metoda A în metoda B.
BenchmarkDotNet este o bibliotecă puternică de benchmark de performanță .Net de pe site-ul oficialAutentificarea cu hyperlink este vizibilă.
Mai întâi, vom crea un nou proiect de consolă .NET Core 3.1. Numele proiectului este: BenchmarkTest
Instalează BenchmarkDotNet folosind comanda nuget, iar codul este următorul:
Faceți dublu clic pe proiect pentru a modifica platforma țintă a proiectului, după cum urmează:
Testăm performanța metodelor TestMD5 și TestSHA1 în cadrul .NET Framework 4.7.2 și .NET Core 3.1, respectiv.
Codul este următorul:
Încearcă să o execuți cu următoarea eroare:
Validarea benchmark-urilor: Assembly BenchmarkTest, care definește benchmark-urile, este neoptimizat Benchmark-ul a fost construit fără optimizarea activată (cel mai probabil o configurație DEBUG). Te rog, construiește-l în RELEASE. Dacă doriți să depanați benchmark-urile, vă rugăm să consultațiAutentificarea cu hyperlink este vizibilă.
Schimbă proiectul în modul RELEASEpentru a relua proiectul, așa cum se arată mai jos:
* Rezumat *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/November2018Update/19H2) Intel Core i5-8259U CPU 2.30GHz (Coffee Lake), 1 CPU, 8 nuclee logice și 4 nuclee fizice .NET Core SDK=5.0.103 [Gazdă]: .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ă | Job | Durata de rulare | Mean | Eroare | StdDev | Min | Max | Median | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 SUA | 0.0804 us | 0.1045 SUA | 3.958 SUA | 4.318 SUA | 4.123 SUA | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 SUA | 0.0793 SUA | 0.1085 SUA | 3.926 SUA | 4.289 SUA | 4.003 SUA | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 SUA | 0.0122 us | 0.0114 SUA | 1.202 SUA | 1.238 SUA | 1.214 SUA | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 SUA | 0.0186 SUA | 0.0165 SUA | 1.284 SUA | 1.336 SUA | 1.307 SUA |
* Indicii * Excepții TestContext.TestSHA1: .NET 4.7.2 -> 1 excepție a fost eliminată (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 excepție a fost eliminată (1.37 us)
* Legende * Media: Media aritmetică a tuturor măsurătorilor Eroare: Jumătate din intervalul de încredere de 99,9% StdDev: Deviația standard a tuturor măsurătorilor Minim: Minim Max: Maxim Mediană: Valoarea care separă jumătatea superioară a tuturor măsurătorilor (percentila 50) 1 SUA : 1 microsecundă (0,000001 sec)
***** BenchmarkRunner: Sfârșitul ***** ** A rămas 0 reper(e) de rulat ** Durată: 00:01:14 (74 secunde), benchmark-uri executate: 4
Timp total global: 00:01:20 (80,63 sec), benchmark-uri executate: 4 * Curățarea artefactelor * Odată executate, rezultatele testelor sunt salvate în proiectul nostru \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, în csv, html, md și alte formate.
Notă:Selecția cadrelor țintă în SimpleJob este incorectă și poate să nu funcționeze corectAșa cum urmează:
Nu am reușit să construiesc în paralel, trec la construcția secvențială
Resurse:Autentificarea cu hyperlink este vizibilă.
|