Актуально

Замеряем производительность с помощью BenchmarkDotNet

Здравствуйте, неделю назад я в третий раз использовал библиотеку для создания/прогона .NET бенчмарков .net benchmark. Оказалось, что это очень полезная библиотека, но не очень освещенная в центре.

Бенчмаркинг — это процесс измерения времени выполнения метода. Сначала представим себе процесс написания бенчмарка вручную. Создаем тестируемый метод, выбираем Release build, создаем метод «measure», в котором собираем мусор, ставим StopWatch в начало и конец, запускаем warm-up и запускаем тестируемый метод. Если тестируемый метод работает быстрее, чем один «тик» StopWatch, запустите тестируемый метод несколько раз (скажем, 1 000 000 раз) и разделите общее время на 1 000 000 раз, чтобы получить результат (не забудьте вычесть из общего времени время «холостого» выполнения цикла 1 000 000 раз). (т.е. проделать то же самое).

Как видите, здесь очень много деталей. Даже если она приемлема, то при измерении производительности на разных архитектурах (x86x64) и с разными компиляторами она ухудшается. Как видите, BenchmarkDotNet уделяет большое внимание этим деталям.

Как видите, для простого запуска достаточно подключить атрибут [Benchmark(Description=»TestName»)] к тестируемому методу и запустить код в консольном или юнит-тесте. Все, что требуется от метода, — это то, что он должен быть публичным (иначе его нельзя будет протестировать) и не принимать аргументов (иначе он вызовет исключение). По завершении бенчмаркинга в консоль выводится подробный отчет о тестировании с итоговой таблицей в конце.

По умолчанию она содержит название метода, медиану и стандартное отклонение; если атрибут «Description» свойства [.net performance benchmark] не установлен, то в столбце Method будет отображаться название метода. Кстати, строки таблицы сортируются в соответствии со значением атрибута «Описание» (название метода). Следует также отметить, что невыловленные исключения в методе приведут к остановке измерения (именно этого метода).

Конфигурация эталонов

Настройка эталонов производится через свойство Config. Настройки среды/платформы/дрожания, количество запусков, настройки вывода, логгер, анализатор… Примеры конфигураций можно найти на странице библиотеки на https://amarozka.dev/.

Простейший способ настройки: установить свойство Config на классе, содержащем метод Benchmark, и передать настройки в виде строки в конструктор.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *