Skip to content

v0.7.0

Choose a tag to compare

@Stivo182 Stivo182 released this 09 Mar 21:37
· 22 commits to main since this release

Новые возможности

Изолированные запуски бенчмарков (#39, #40)

  • Бенчмарки запускаются в отдельном процессе с настроенной средой.
  • Каждая итерация стратегии ХолодныйЗапуск выполняется в отдельном процессе.

Источники параметров из внешнего модуля/класса (#23, #38)

Параметры бенчмарков можно задавать через внешний модуль или класс с помощью аннотации &ИсточникПараметров.

Новые методы в API:

  • КонфигурацияБенчмарков: ДобавитьИсточникПараметров(), ИсточникиПараметров(), ОчиститьИсточникиПараметров()
  • ДескрипторБенчмарка: ДобавитьИсточникПараметров(), ИсточникиПараметров(), ОчиститьИсточникиПараметров()

Замер памяти через библиотеку allocs (#32)

Вместо собственного нативного модуля GcStats используется библиотека allocs. Нативный модуль GcStats (включая СтатистикаСборщикаМусора) полностью удалён.

Расширенная валидация входных параметров (#24)

Добавлена детальная проверка корректности параметров бенчмарка с информативными сообщениями об ошибках.

Новые методы

  • КонфигурацияБенчмарков.УдалитьМониторингПамяти()
  • КоллекцияДескрипторовБенчмарков.Очистить()
  • КоллекцияДескрипторовБенчмарков.НайтиПоТипуИИмени()
  • КоллекцияДескрипторовБенчмарков.Прочитать()
  • ДескрипторБенчмарка.Скопировать()
  • ПараметрБенчмарка.Представление()
  • ЗапускательБенчмарков.УстановитьПортОтладки()
  • МатематическиеФункцииБенчмарков.НольЕслиНеопределено()

Рефакторинг

  • Собственная реализация хронометра (#36) - удалена зависимость от Perfolizer, реализован хронометр на базе System.Diagnostics.Stopwatch.
  • Перевод модулей в классы - модули ИзвлекательДескрипторовБенчмарков, ИзвлекательКонфигурацииБенчмарков, ИсполняющаяСредаБенчмарков, КомбинаторПараметровБенчмарка преобразованы в классы.
  • Рефакторинг сериализатора (#28) - полностью переработана сериализация/десериализация.
  • Обработка ошибок в обработчиках событий - добавлена корректная обработка исключений.
  • Замена ПарсерОписанияПакета на библиотеку packageinfo.
  • Удалён AssemblyResolve из нативных компонентов.
  • Удалён ObjectExtension.cs (нативное расширение РасширениеОбъекта).

Breaking Changes

Бенчмаркинг (модуль)

Было Стало
Запустить() возвращает Структура Запустить() возвращает РезультатЗапускаБенчмарков
ПодключитьКласс(ПутьКФайлу) ПодключитьБенчмарк(ПутьКФайлу, ИмяТипа)
ЭтоВоркер() ЭтоДочернийПроцесс()

КонфигурацияБенчмарков

Переименованы:

Было Стало
ДобавитьВерсиюИсполняющейСреды(Версия, Наименование, ЭтоЭталон) ДобавитьИсполняющуюСреду(Версия, Наименование, ЭтоЭталон)
ВерсииИсполняющейСреды() ИсполняющиеСреды()
ОчиститьВерсииИсполняющейСреды() ОчиститьИсполняющиеСреды()
ЭталоннаяВерсияИсполняющейСреды() ЭталоннаяИсполняющаяСреда()

Удалены:

  • ВСтроку()
  • ДелегатыОбработчиковСобытия(ИмяСобытия, ОбъектБенчмарков, Контекст)
  • ИменаПараметров()
  • ИсполняющаяСредаОграниченаТекущей()

ДескрипторБенчмарка

Переименованы:

Было Стало
ТипОбъекта() ТипКласса()

ПараметрБенчмарка

Публичные поля заменены на методы:

Было Стало
Перем Имя Экспорт (поле) Функция Имя() Экспорт (метод)
Перем Значение Экспорт (поле) Функция Значение() Экспорт (метод)
Перем ЭтоПараметрМетода Экспорт (поле) Функция ЭтоПараметрМетода() Экспорт (метод)

КолонкаОтчетаБенчмарков

Было Стало
Перем ЗначениеДелегат Экспорт (тип Делегат) Перем ДелегатЗначение Экспорт (тип Действие)
Перем ПредставлениеЗначенияДелегат Экспорт (тип Делегат) Перем ДелегатПредставлениеЗначения Экспорт (тип Действие)
Значение(СтрокаРезультата, Колонка) Значение(РезультатЗапускаКейса, Колонка)

СериализаторРезультатовБенчмарков

Было Стало
СериализоватьВJSON(РезультатыБенчмарков, ИмяФайла) ЗаписатьВJson(РезультатЗапускаБенчмарков, ПолноеИмяФайла)
ДесериализоватьИзJSON(ИмяФайла, Конфигурация) ПрочитатьИзJson(ПолноеИмяФайла)
СериализоватьВXML(РезультатыБенчмарков, ИмяФайла) Удалён

СериализацияОбъектовБенчмаркинга (модуль)

Полностью переработан API:

Было Стало
ПодготовитьЗначение(Значение) ВJson(Значение)
ЗначениеСериализуется(Значение) ЭтоПримитив(Значение)
- ИзJson(Json, ТипОбъекта) (добавлено)
- ПривестиКПримитиву(Значение) (добавлено)

ЭкспортерыРезультатовБенчмарков (модуль)

Удалены:

  • Экспорт - XML-экспорт больше не поддерживается

Экспортеры результатов (Html, Json, Markdown)

Изменена сигнатура Записать() у всех трёх экспортеров:

Было Стало
Записать(РезультатыБенчмарков) Записать(РезультатЗапускаБенчмарков, ПолноеИмяФайла)

Обработчики событий

  • Тип Делегат в обработчиках событий больше не поддерживается - передавайте строку вида "ИмяКласса.ИмяМетода"

Строковое представление

  • Метод ВСтроку() удалён в классах: КонфигурацияБенчмарков, СредаОкруженияБенчмарков, СтатистикаБенчмарка.
  • Используйте глобальную функцию Строка() - она вызывает обработчик ОбработкаПолученияПредставления.

Удалённые классы

  • МенеджерРасшифровкиРезультатовБенчмарков - функционал интегрирован в новую систему результатов
  • ОберткаИсточникаБенчмарков - функционал перенесён
  • СериализаторКонфигурацииБенчмарков - заменён новой системой сериализации
  • ЭкспортерРезультатовБенчмарковВXml - XML-экспорт упразднён

Удалённые модули

  • ИзвлекательДескрипторовБенчмарков - переведён в класс
  • ИзвлекательКонфигурацииБенчмарков - переведён в класс
  • ИсполняющаяСредаБенчмарков - переведён в класс
  • КомбинаторПараметровБенчмарка - переведён в класс
  • КонсольныйВыводБенчмаркера - заменён на КонсольныйРепортерБенчмарков
  • ПарсерОписанияПакета - заменён библиотекой packageinfo

Аннотации

Добавлена:

  • &ИсточникПараметров - определяет метод-источник параметров для поля или метода бенчмарка

Удалена:

  • &ЭкспортXml - XML-экспорт упразднён

Изменён контекст обработчиков событий:

&ПередКаждым - структура Контекст:

Было Стало
ДескрипторБенчмарка (ДескрипторБенчмарка)
ПараметрыМетода (Массив из Произвольный)
Кейс (КейсБенчмарка)

&ПослеКаждого - структура Контекст:

Было Стало
ДескрипторБенчмарка (ДескрипторБенчмарка)
ПараметрыМетода (Массив из Произвольный)
Кейс (КейсБенчмарка)
Замеры (ТаблицаЗначений) Замеры (Массив из РезультатИтерацииКейса)

&ПослеВсех - структура Контекст:

Было Стало
Расшифровка (ТаблицаЗначений) Запуски (Массив из РезультатЗапускаКейса)

CLI-параметры

Было Стало
-c config <файл> --settings <файл>
--worker Удалён
Экспорт: md, json, xml, html Экспорт: md, json, html
- Добавлен --debug <порт>

Зависимости

Добавлены

Библиотека Версия
allocs 0.1.0
packageinfo 1.1.1
1commands 1.5.0 (была только dev-зависимость)
validate 0.3.0
reflector 0.7.1
collectionos 0.8.2

Обновлены

Библиотека Было Стало
cpuinfo 1.3.0 1.4.0
annotations 1.3.1 1.4.0
asserts 1.4.0 1.6.1
autumn 4.3.10 4.3.12
lambdas 0.3.2 0.3.3

Удалены

Библиотека Причина
xml-parser Удалён XML-экспорт
Нативный модуль GcStats Заменён библиотекой allocs
Зависимость Perfolizer (NuGet) Собственная реализация хронометра

Требования к среде

  • .NET: обновлён до 8.0 (был 6.0)
  • OneScript: >= 1.9.3

Документация и примеры

  • Реорганизована структура samples/benchmarks/ - добавлены подкаталоги examples/ и features/.
  • Добавлены примеры с документацией: бенчмарк механизмов вызова метода, поиска в коллекциях, сборки строк, хеш-функций.
  • Обновлена документация по: событиям, параметризации, метрикам, стратегиям запуска, отчётам, эталонам.