Микробенчмарки в .Net

cdtyjv
Дата: 21.06.2014 00:27:05
Я джавист. И в нашей среде есть решение для микробенчмарков, разработанное энтузиастами - JMH. Оно очень крутое. И не дает заоптимизировать код бенчмарка, и JIT греет, и амортизирует накладные расходы правильно. В общем, очень крутая штука, которой можно качественно измерять что угодно, вплоть до стоимости конкретных чтений/записей.

Сейчас мне надо написать быстрый код на .Net, и мне надо провести ряд экспериментов в критичных участках кода. Например, что будет быстрее - записать int по байту в поток, или же записать в поток один раз через BitConverter. Или - записать данные в поток одним проходом, аллоцировав для этого несколько дополнительных объектов, или же записать часть данных, а потом сделать пару Seek в потоке, но без аллокаций. Или понять, насколько дорого боксинг/анбоксинг и приведение типов через указатели. Ну и т.д..

Есть ли в .Net что-то аналогичное JMH в Java для проведения честных микробенчмарков?
bazile
Дата: 21.06.2014 04:44:29
cdtyjv, лично я самостоятельно делаю замеры с помощью класса Stopwatch. В то же время перед мной никогда не стояла задача делать это массово и максимально надежно. Посмотри следующие решения:
  • BenchmarkDotNet + статья-введение;
  • фреймворк от Джона Скита. В его библиотеке NodaTime можно посмотреть пример использования;
  • MeasureIt