Wymagania: W procesie tworzenia te same dwie metody funkcji mogą spełnić nasze wymagania, ale ze względów wydajnościowych wybierzemy najlepszą metodę wywołania wydajności, jak przetestować wydajność kodu?
Benchmarking wydajności może pomóc programistom porównać wydajność dwóch fragmentów kodu lub metod, co stanowi dobry standard ilościowy dla przepisywania lub refaktoryzacji kodu. Bez benchmarków wydajności trudno sobie wyobrazić, jak można rozpoznać różnicę gołym okiem, zmieniając metodę A na metodę B.
BenchmarkDotNet to potężna biblioteka benchmarków wydajności .Net dostępna na oficjalnej stronie internetowejLogowanie do linku jest widoczne.
Najpierw stworzymy nowy projekt konsolowy .NET Core 3.1. Nazwa projektu to: BenchmarkTest
Zainstaluj BenchmarkDotNet za pomocą polecenia nuget, kod jest następujący:
Kliknij dwukrotnie projekt, aby zmodyfikować docelową platformę projektu, w następujący sposób:
Testujemy wydajność metod TestMD5 i TestSHA1 odpowiednio w ramach .NET Framework 4.7.2 i .NET Core 3.1.
Kod jest następujący:
Spróbuj wykonać go z następującym błędem:
Weryfikacja benchmarków: Assembly BenchmarkTest definiujący benchmarki jest nieoptymalizowany Benchmark został zbudowany bez włączonej optymalizacji (najprawdopodobniej w konfiguracji DEBUG). Proszę, zbudujcie go w WYDANIU. Jeśli chcesz debugować testy testowe, proszę zobaczyćLogowanie do linku jest widoczne.
Przełącz projekt na tryb RELEASEAby rozpocząć projekt od nowa, jak pokazano poniżej:
* Podsumowanie *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/listopad 2018Update/19H2) Intel Core i5-8259U CPU 2.30GHz (Coffee Lake), 1 procesor, 8 rdzeni logicznych i 4 rdzenie fizyczne .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
| Metoda | Praca | Czas działania | Mean | Błąd | StdDev | Min | Max | Mediana | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | 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 USA | 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 |
* Wskazówki * Odstające TestContext.TestSHA1: .NET 4.7.2 -> usunięto 1 odstające (5.52 us) TestContext.TestSHA1: .NET Core 3.1 -> 1 odstawczy został usunięty (1.37 us)
* Legendy * Średnia : Średnia arytmetyczna wszystkich pomiarów Błąd: Połowa 99,9% przedziału ufności StdDev : Odchylenie standardowe wszystkich pomiarów Minimum: Minimum Maksymalnie: Maksimum Mediana: Wartość oddzielająca górną połowę wszystkich pomiarów (50. percentyl) 1 us : 1 mikrosekunda (0,000001 sek)
***** BenchmarkRunner: Koniec ***** ** Pozostało 0 punktów do uruchomienia ** Czas działania: 00:01:14 (74 sek), wykonane testy końcowe: 4
Globalny czas całkowity: 00:01:20 (80,63 s), wykonane testy końcowe: 4 * Sprzątanie artefaktów * Po uruchomieniu wyniki testu są zapisywane w folderze projektu \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results, w formatach csv, html, md i innych.
Nuta:Wybór ramek docelowych w SimpleJob jest nieprawidłowy i może nie być prawidłowo wykonywanyNastępujący sposób:
Nie udało się zbudować równolegle, więc przeszedłem na sekwencyjną budację
Zasoby:Logowanie do linku jest widoczne.
|