Библиотека для измерения производительности кода на OneScript, вдохновлённая BenchmarkDotNet, с поддержкой параметризации, мониторинга памяти и гибкой настройки тестов.
- Гибкая настройка: конфигурация тестов через аннотации, программный код и CLI.
- Параметризованные тесты: запуск одних и тех же тестов с разными входными данными.
- Мониторинг памяти: отслеживание аллокации памяти во время выполнения.
- Мультиверсионное сравнение: запуск бенчмарков на указанных версиях исполняющей среды OneScript с консолидацией результатов.
- Метрики: время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили.
- Экспорт результатов: сохранение результатов выполнения бенчмарков в Markdown, JSON, HTML.
opm install benchmarkСоздайте класс с методами, помеченными аннотацией &Бенчмарк, где каждый метод реализует тестируемую логику.
В следующем примере мы сравниваем алгоритмы конкатенации строк через оператор + и метод СтрСоединить:
// СборкиСтрок.os
&Параметры(100, 1000)
Перем Количество Экспорт;
Перем Элементы;
&МониторингПамяти
Процедура ПриСозданииОбъекта()
КонецПроцедуры
&ПередКаждым
Процедура ПодготовитьДанные(Контекст) Экспорт
Элементы = Новый Массив();
Для к = 1 По Количество Цикл
Элементы.Добавить("Элемент" + к);
КонецЦикла;
КонецПроцедуры
&Бенчмарк
&Эталон
Процедура КонкатенацияВЦикле() Экспорт
Результат = "";
Для Каждого Элемент Из Элементы Цикл
Результат = Результат + Элемент;
КонецЦикла;
КонецПроцедуры
&Бенчмарк
Процедура ЧерезСтрСоединить() Экспорт
Результат = СтрСоединить(Элементы);
КонецПроцедурыЗапустите бенчмарки одним из следующих способов:
CLI:
benchos run СборкиСтрок.osAPI:
#Использовать benchmark
Результат = Бенчмаркинг.Запустить(Тип("СборкиСтрок"));Более подробно про запуск бенчмарков можно почитать в документации.
После завершения тестов в консоли будет отображена подробная сводная таблица, оформленная в формате Markdown:
// Сводка
BenchmarkOneScript v0.7.0, OneScript v2.0.1-rc.2+702, Microsoft Windows NT 10.0.20348.0 \
Intel Core i7-8700 CPU 3.20GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
| Method | Количество | Baseline | Mean | StdErr | StdDev | Ratio | Op/s | Allocated |
|--------------------|-----------:|----------|-------------:|-------------:|-------------:|------:|----------:|-------------:|
| КонкатенацияВЦикле | 100 | Yes | 28.782 us | 819.33 ns | 3,173.3 ns | 1.00 | 34,744.1 | 92.524 KB |
| ЧерезСтрСоединить | 100 | No | 4.078 us | 53.84 ns | 208.5 ns | 0.14 | 245,203.4 | 2.672 KB |
| КонкатенацияВЦикле | 1,000 | Yes | 1,139.845 us | 30,999.38 ns | 120,060.1 ns | 1.00 | 877.3 | 9,623.388 KB |
| ЧерезСтрСоединить | 1,000 | No | 24.145 us | 633.03 ns | 2,451.7 ns | 0.02 | 41,416.1 | 20.250 KB |
// Легенда
Количество : Значение параметра 'Количество'
Mean : Арифметическое среднее всех измерений
StdErr : Стандартная ошибка всех измерений
StdDev : Стандартное отклонение всех измерений
Ratio : Среднее значение соотношений времени выполнения относительно эталона ([Mean] / [Baseline Mean])
Op/s : Операций в секунду
Allocated : Выделяемая память на одну операцию
1 us : 1 Микросекунда
1 ns : 1 Наносекунда