Разбирать код C# для машинных инструкций
Я экспериментирую с производительностью компилятора. У меня есть очень маленький кусочек кода, всего несколько умножений и дополнений с плавающей запятой. Код выполняется в цикле несколько миллионов раз. Я пытаюсь скомпилировать код в C++, C#, Java, Perl, Python ... и затем я запускаю результат при измерении времени выполнения.
Я весьма недоволен производительностью C#. Мой код на C# примерно на 60% медленнее, чем эквивалентный C++ или Java. Я уверен, что в моем эксперименте должна быть ошибка. Я хотел бы разобрать получившийся двоичный файл, чтобы узнать, почему.
Есть ли такая опция с кодом MSIL? Можно ли проверить результаты работы компилятора C# JIT на уровне машинных инструкций (инструкции x86, а не инструкции MSIL)?
Обновить
код (u, v, g* двойные; шаги целые)
stopwatch.Start();
for (int i = 0; i < steps; i++)
{
double uu = g11 * u + g12 * v;
v = g21 * u + g22 * v;
u = uu;
}
stopwatch.Stop();
3 ответа
Отладьте свой код в Visual Studio (но скомпилируйте в режиме выпуска), поместите точку останова в цикл и откройте окно Разборка (Отладка -> Windows -> Разборка), когда выполнение остановится на точке останова.