Požiadavky: V procese vývoja môžu naše požiadavky spĺňať tie isté dve funkčné metódy, ale z dôvodu výkonu vyberieme najlepšiu výkonnostnú metódu volania, ako otestovať výkon kódu?
Benchmarking výkonu môže programátorom pomôcť porovnať výkon dvoch úryvkov alebo metód kódu, čo môže poskytnúť dobrý kvantifikačný štandard pre prepisovanie alebo refaktorovanie kódu. Bez výkonnostných benchmarkov je ťažké si predstaviť, ako môžete rozpoznať rozdiel vo výkone voľným okom, keď zmeníte metódu A na metódu B.
BenchmarkDotNet je výkonná knižnica .Net benchmarkov výkonu na oficiálnej webovej stránkePrihlásenie na hypertextový odkaz je viditeľné.
Najprv vytvoríme nový .NET Core 3.1 konzolový projekt. Názov projektu je: BenchmarkTest
Nainštalujte BenchmarkDotNet pomocou príkazu nuget, kód je nasledovný:
Dvojitým kliknutím na projekt upravte cieľovú platformu projektu, nasledovne:
Testujeme výkon metód TestMD5 a TestSHA1 pod frameworkmi .NET Framework 4.7.2 a .NET Core 3.1.
Kód je nasledovný:
Skúste ho vykonať s nasledujúcou chybou:
Overovanie benchmarkov: Assembly BenchmarkTest, ktorý definuje benchmarky, nie je optimalizovaný Benchmark bol vytvorený bez povolenej optimalizácie (pravdepodobne konfigurácia DEBUG). Prosím, postavte to vo RELEASE. Ak chcete ladiť benchmarky, pozrite siPrihlásenie na hypertextový odkaz je viditeľné.
Prepnite projekt do režimu RELEASENa opätovné začatie projektu, ako je uvedené nižšie:
* Zhrnutie *
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 logických a 4 fyzické jadrá .NET Core SDK=5.0.103 [Hostiteľ] : .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
| Metóda | Práca | Runtime | Priemer | Chyba | StdDev | Min | Max | Medián | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | 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 US | 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 |
* Nápovedy * Odľahlé hodnoty TestContext.TestSHA1: .NET 4.7.2 -> 1 odľahlá hodnota bola odstránená (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 odľahlá hodnota bola odstránená (1.37 US)
* Legendy * Priemer : Aritmetický priemer všetkých meraní Chyba: polovica z 99,9 % intervalu spoľahlivosti StdDev : Štandardná odchýlka všetkých meraní Min : Minimum Max : Maximum Medián: Hodnota oddeľujúca hornú polovicu všetkých meraní (50. percentil) 1 us : 1 mikrosekunda (0,000001 sekundy)
***** BenchmarkRunner: Koniec ***** ** Zostali 0 benchmarkov na spustenie ** Dĺžka behu: 00:01:14 (74 sekúnd), vykonané benchmarky: 4
Celkový globálny čas: 00:01:20 (80,63 s), vykonané benchmarky: 4 * Čistenie artefaktov * Po spustení sa výsledky testu ukladajú do priečinka Project \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, v csv, html, md a ďalších formátoch.
Nota:Výber cieľových rámcov v SimpleJob je nesprávny a nemusí sa správne vykonávaťTakto:
Nepodarilo sa mi zostaviť paralelne, prechádzam na sekvenčné zostavovanie
Zdroje:Prihlásenie na hypertextový odkaz je viditeľné.
|