- Главный вопрос: что и зачем вы измеряете?
- Используйте библиотеки для бенчмаркинга: JMH, BenchmarkDotNet
- Release build
- Без дебаггера
- Выключите другие приложения
- Используйте максимальную производительность
- BenchmarkDotNet, см. Intro_00_Basic, Intro_01_MethodTasks
- Правильный инструмент: Swopwatch, см. Framework_StopwatchVsDateTime, Заблуждения программистов относительно времени
- Делайте прогрев, см. Intro_03_SingleRun
- Делайте достаточное количество итераций, запускайте бенчмарк несколько раз, считайте статистики, см. логи
- Помните про накладные расходы на бенчмаркинг
- Размотка циклов, см. Jit_LoopUnrolling, Jit_ArraySumLoopUnrolling
- Не смешивайте бенчмарки, см. Jit_InterfaceMethod
- Запускайте CLR несколько раз
- Свёртка констант, см. Math_DoubleSqrtAvx
- Dead code elimination
- Организация доступа к памяти, см. Cpu_MatrixMultiplication, Cache-Conscious Binary Search
- Нужно пробовать разные окружения (Runtime, версия .NET Framework, x86/x64, LegacyJIT/RyuJIT, GC, JIT/NGen(MPGO?)/.NET Native, hardware), см. Cpu_Ilp_RyuJit, Math_DoubleSqrt
- Inlining, см. Jit_Inlining