Вимоги: У процесі розробки однакові два функціональні методи можуть відповідати нашим вимогам, але з міркувань продуктивності ми оберемо найкращий метод для виклику, як перевірити продуктивність коду?
Бенчмаркинг продуктивності може допомогти програмістам порівняти продуктивність двох фрагментів або методів коду, що дає хороший стандарт кількісної оцінки для переписування або рефакторингу коду. Без бенчмарків продуктивності важко уявити, як можна помітити різницю в продуктивності неозброєним оком, коли змінюєш метод А на метод Б.
BenchmarkDotNet — це потужна бібліотека бенчмарків продуктивності .Net на офіційному сайтіВхід за гіперпосиланням видно.
Спочатку ми створимо новий проєкт для консолі .NET Core 3.1. Назва проєкту: BenchmarkTest
Встановіть BenchmarkDotNet за допомогою команди nuget, код виглядає так:
Подвійний клік по проєкту, щоб змінити цільову платформу проєкту, наступним чином:
Ми тестуємо продуктивність методів TestMD5 та TestSHA1 відповідно під фреймворками .NET Framework 4.7.2 та .NET Core 3.1.
Код виглядає так:
Спробуйте виконати його з такою помилкою:
Валідація бенчмарків: Assembly BenchmarkTest, який визначає бенчмарки, не оптимізований Benchmark був створений без увімкнення оптимізації (найімовірніше, це була конфігурація DEBUG). Будь ласка, побудуйте це в RELEASE. Якщо хочете налагодити бенчмарки, будь ласка, дивітьсяВхід за гіперпосиланням видно.
Переключіть проєкт у режим RELEASEЩоб почати проєкт знову, як показано нижче:
* Резюме *
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.1379 (1909/листопад 2018Update/19H2) Intel Core i5-8259U процесор 2.30GHz (Coffee Lake), 1 процесор, 8 логічних і 4 фізичних ядра .NET Core SDK=5.0.103 [Хост]: .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
| Метод | Робота | Час виконання | Mean | Помилка | StdDev | Мін | Макс | Медіана | |--------- |-------------- |-------------- |---------:|----------:|----------:|---------:|---------:|---------:| | TestMD5 | .NET 4.7.2 | .NET 4.7.2 | 4.119 США | 0,0804 US | 0.1045 us | 3.958 США | 4.318 США | 4.123 США | | TestSHA1 | .NET 4.7.2 | .NET 4.7.2 | 4.043 США | 0.0793 US | 0.1085 us | 3.926 США | 4.289 США | 4.003 США | | TestMD5 | .NET Core 3.1 | .NET Core 3.1 | 1.216 США | 0.0122 us | 0.0114 us | 1.202 США | 1.238 США | 1.214 США | | TestSHA1 | .NET Core 3.1 | .NET Core 3.1 | 1.307 США | 0.0186 us | 0.0165 us | 1.284 США | 1.336 США | 1.307 США |
* Підказки * Винятки TestContext.TestSHA1: .NET 4.7.2 -> 1 викид було видалено (5.52 us) TestContext.TestSHA1: Викид .NET Core 3.1 -> 1 було видалено (1.37 us)
* Легенди * Середнє : Арифметичне середнє всіх вимірювань Помилка: Половина довірчого інтервалу 99,9% StdDev: Стандартне відхилення всіх вимірювань Мінімум : Мінімум Макс: Максимум Медіана: значення, що відокремлює верхню половину всіх вимірювань (50-й перцентиль) 1 us : 1 мікросекунда (0,000001 сек)
***** BenchmarkRunner: Кінець ***** ** Залишилося 0 еталонних стандартів для запуску ** Тривалість: 00:01:14 (74 сек), виконані бенчмарки: 4
Глобальний загальний час: 00:01:20 (80.63 сек), виконані бенчмарки: 4 * Очищення артефактів * Після виконання результати тесту зберігаються у папці нашого проєкту \BenchmarkTest\bin\Release\netcoreapp3.1\BenchmarkDotNet.Artifacts\results у форматах csv, html, md та інших.
Примітка:Вибір цільового кадру в SimpleJob є неправильним і може виконувати їх некоректноНаступним чином:
Не вдалося зібрати в паралельному режимі, перехід на послідовну збірку
Ресурси:Вхід за гіперпосиланням видно.
|