Библиотека для измерения производительности кода на OneScript, вдохновлённая BenchmarkDotNet, с поддержкой параметризации, мониторинга памяти и гибкой настройки тестов.
- Гибкая настройка: конфигурация тестов через аннотации или программный код.
- Параметризованные тесты: запуск одних и тех же тестов с разными входными данными.
- Мониторинг памяти: отслеживание аллокации памяти во время выполнения.
- Метрики: время выполнения (среднее, минимум, максимум), стандартное отклонение и ошибка, операций в секунду (Op/s), квартили и произвольные процентили.
- Отчеты в Markdown: автоматическая генерация таблицы с результатами.
opm install benchmark
Создайте класс с методами, помеченными аннотацией &Бенчмарк
, где каждый метод реализует тестируемую логику.
В следующем примере мы сравниваем алгоритмы конкатенации строк через оператор +
и метод СтрСоединить
:
// КонкатенацияСтрок.os
&Параметры(100, 1000)
Перем Количество Экспорт;
Перем Подстрока;
&МониторингПамяти
Процедура ПриСозданииОбъекта()
Подстрока = "Просто текст";
КонецПроцедуры
&Бенчмарк
&Эталон
Процедура ОператорСложения() Экспорт
Текст = "";
Для НомерПодстроки = 1 По Количество Цикл
Текст = Текст + Подстрока;
КонецЦикла;
КонецПроцедуры
&Бенчмарк
Процедура МассивПодстрок() Экспорт
МассивПодстрок = Новый Массив();
Для НомерПодстроки = 1 По Количество Цикл
МассивПодстрок.Добавить(Подстрока);
КонецЦикла;
Текст = СтрСоединить(МассивПодстрок);
КонецПроцедуры
Запустите бенчмарки одним из следующих способов:
CLI:
benchos run [FILE]
FILE
- имя файла класса бенчмарков в текущем каталоге, либо полный путь к нему
API:
#Использовать benchmark
#Использовать "."
Результат = Бенчмаркинг.Запустить(Тип("КонкатенацияСтрок"));
После завершения тестов в консоли будет отображена подробная сводная таблица, оформленная в формате Markdown:
BenchmarkOneScript v0.1.0, OneScript v2.0.0.567-rc7-29039316, Microsoft Windows NT 10.0.20348.0 \
Intel Core i7-8700 CPU 3.20GHz (Max: 3.19GHz) (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
| Method | Количество | Baseline | Mean | StdErr | StdDev | Ratio | Median | Op/s | Allocated |
|------------------|-----------:|----------|------------:|-----------:|------------:|------:|------------:|-------:|-------------:|
| МассивПодстрок | 100 | false | 72.46 us | 174.7 ns | 957.1 ns | 1.589 | 72.09 us | 13,801 | 17.77 KB |
| ОператорСложения | 100 | true | 45.67 us | 323.2 ns | 1,770.3 ns | 1.000 | 45.67 us | 21,898 | 126.54 KB |
| МассивПодстрок | 1,000 | false | 692.11 us | 823.5 ns | 4,510.5 ns | 0.567 | 692.44 us | 1,445 | 165.43 KB |
| ОператорСложения | 1,000 | true | 1,220.96 us | 7,647.4 ns | 41,886.6 ns | 1.000 | 1,205.49 us | 819 | 11,808.96 KB |
// Легенда
Количество : Значение параметра 'Количество'
Mean : Арифметическое среднее всех измерений
StdErr : Стандартная ошибка всех измерений
StdDev : Стандартное отклонение всех измерений
Ratio : Среднее коэффициентов отношений ([Mean] / [Baseline Mean])
Median : Значение, разделяющее упорядоченные измерения на две равные части
Op/s : Операций в секунду
Allocated : Выделяемая память на одну операцию
1 us : 1 Микросекунда
1 ns : 1 Наносекунда