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

时间:2011-05-14 11:18:52

标签: c# performance x86 cil ildasm

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

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

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

更新

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

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 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

Ngen您的计划并反汇编结果。

答案 2 :(得分:1)

也许你可以先ngen(编译为本机代码)二进制文件,以避免JIT编译。