将c#代码反汇编为机器指令

dan*_*tel 5 c# performance x86 cil ildasm

我正在尝试编译器性能.我有一小段代码,只有一些浮点乘法和加法.代码在循环中执行数百万次.我试图用C++,c#,java,perl,python编译代码......然后我在测量执行时间的同时运行结果.

我对c#性能非常不满意.我的c#代码比同等的C++或java慢约60%.我相信,我的实验中肯定有一个错误.我想反汇编生成的二进制文件来了解原因.

MSIL代码有这样的选项吗?是否可以在机器指令级别检查c#JIT编译器的结果(x86指令,而不是MSIL指令)?

更新

代码(u,v,g*是double; steps是整数)

stopwatch.Start();
for (int i = 0; i < steps; i++)
{
    double uu = g11 * u + g12 * v;
    v = g21 * u + g22 * v;
    u = uu;
}
stopwatch.Stop();
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 7

在Visual Studio中调试代码(但在发布模式下编译),在循环中放置一个断点,并在执行在断点处停止时打开反汇编窗口(Debug - > Windows - > Disassembly).

  • @danatel:它可以工作但你可能需要做得更好.重写程序以运行两次感兴趣的代码,并在两次运行之间建立一个消息框.当消息框出现时,将调试器附加到进程.请记住,**抖动知道您是否正在调试**.在调试器运行时,它可以并确实生成不太优化的代码,以使调试体验更好.如果您想知道调试器未运行时抖动正在做什么,那么在抖动第一次生成代码后连接调试器. (3认同)