Reikalavimai: Kūrimo procese tie patys du funkcijų metodai gali atitikti mūsų reikalavimus, tačiau dėl našumo priežasčių parinksime geriausią skambinimo veikimo būdą, kaip patikrinti kodo veikimą?
Našumo lyginamoji analizė gali padėti programuotojams palyginti dviejų kodo fragmentų ar metodų našumą, o tai gali būti geras kodo perrašymo ar pertvarkymo kiekybinio įvertinimo standartas. Be našumo etalonų sunku įsivaizduoti, kaip plika akimi galite pastebėti našumo skirtumą, kai pakeičiate A metodą į B metodą.
"BenchmarkDotNet" yra galinga .Net našumo etalonų biblioteka oficialioje svetainėjeHipersaito prisijungimas matomas.
Pirmiausia sukursime naują .NET Core 3.1 konsolės projektą. Projekto pavadinimas yra: BenchmarkTest
Įdiekite "BenchmarkDotNet" naudodami komandą nuget, kodas yra toks:
Dukart spustelėkite projektą, kad modifikuotumėte projekto tikslinę platformą, kaip nurodyta toliau.
Testuojame TestMD5 ir TestSHA1 metodų našumą atitinkamai pagal .NET Framework 4.7.2 ir .NET Core 3.1 sistemas.
Kodas yra toks:
Pabandykite jį vykdyti su šia klaida:
Lyginamųjų indeksų patvirtinimas: Surinkimo etalonų testas, apibrėžiantis etalonus, yra neoptimizuotas Etalonas buvo sukurtas be įjungto optimizavimo (greičiausiai DEBUG konfigūracija). Prašome sukurti jį RELEASE. Jei norite derinti etalonus, žr.Hipersaito prisijungimas matomas.
Perjunkite projektą į RELEASE režimąNorėdami pradėti projektą iš naujo, kaip parodyta toliau:
* Santrauka *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/November2018Update/19H2) Intel Core i5-8259U procesorius 2.30GHz (Coffee Lake), 1 procesorius, 8 loginiai ir 4 fiziniai branduoliai .NET Core SDK = 5.0.103 [Pagrindinis kompiuteris] : .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
| Metodas | Darbas | Vykdymo laikas | Vidurkis | Klaida | StdDev | Minimalus | Maks | Mediana | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 JAV | 0,0804 JAV | 0,1045 JAV | 3.958 JAV | 4.318 JAV | 4.123 JAV | | TestasSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 JAV | 0,0793 JAV | 0,1085 JAV | 3.926 JAV | 4.289 JAV | 4.003 JAV | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 JAV | 0,0122 JAV | 0,0114 JAV | 1.202 JAV | 1.238 JAV | 1.214 JAV | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 JAV | 0,0186 JAV | 0,0165 JAV | 1.284 JAV | 1.336 JAV | 1.307 JAV |
* Patarimai * Nuokrypiai TestContext.TestSHA1: .NET 4.7.2 -> 1 išskyra buvo pašalinta (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 išskyra buvo pašalinta (1.37 us)
* Legendos * Vidurkis : visų matavimų aritmetinis vidurkis Klaida : pusė 99,9% pasikliautinojo intervalo StdDev : visų matavimų standartinis nuokrypis Min : Minimalus Maks : Maksimalus Mediana : vertė, skirianti viršutinę visų matavimų pusę (50-asis procentilis) 1 us: 1 mikrosekundė (0,000001 sek.)
***** BenchmarkRunner: pabaigos ***** ** Liko 0 etalonų paleisti ** Trukmė: 00:01:14 (74 sek.), įvykdyti etalonai: 4
Bendras pasaulinis laikas: 00:01:20 (80,63 sek.), įvykdyti etalonai: 4 * Artefaktų valymas * Įvykdžius, testo rezultatai išsaugomi mūsų projekto \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results aplanke, csv, html, md ir kitais formatais.
Nata:SimpleJob tikslinio kadro pasirinkimas neteisingas ir gali būti netinkamai vykdomasTaip:
Nepavyko sukurti lygiagrečiai, pereinant prie nuoseklios komponavimo
Išteklių:Hipersaito prisijungimas matomas.
|