Требования: В процессе разработки одни и те же два функциональных метода могут соответствовать нашим требованиям, но по соображениям производительности мы выбираем лучший метод для вызова, как проверить производительность кода?
Бенчмаркинг производительности помогает программистам сравнивать производительность двух фрагментов или методов кода, что может дать хороший стандарт количественной оценки при переписывании или рефакторинге кода. Без бенчмарков производительности трудно представить, как можно заметить разницу невооружённым глазом, когда меняешь метод А на метод Б.
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,30 ГГц (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 США | 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 США | 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 некорректен и может выполняться неправильно.Следующим образом:
Не удалось собрать в параллельном режиме, перешёл на последовательную сборку
Ресурсы:Вход по гиперссылке виден.
|