如何在.Net中观看优化的ASM代码

时间:2014-05-28 13:29:08

标签: c# .net optimization assembly compilation

因此,如果我只是想看看JIT在调试时编译的内容,我可以进入Debug -> Windows -> Disassembly并观察我想要的一切。但JIT在调试器下执行时不会生成优化代码。例如:

    private static void Foo()
    {
        var sw = Stopwatch.StartNew();
        for (int i = int.MinValue; i < int.MaxValue; i++) {}
        sw.Stop();
        Console.WriteLine(sw.Elapsed);
    }

此代码在调试器下运行时需要12秒(在我的i7-3770上),但如果不是,则只需1秒。

所以它非常有趣:如果没有从代码中删除循环 - 为什么它的运行速度要快10倍。如果它被删除(因为代码无用),为什么需要这个,而不是几个滴答?...


  

问题是什么?

如何在不使用NGen的情况下查看最终的x86优化代码?

1 个答案:

答案 0 :(得分:0)

所以,答案非常简单,你应该在Visual Studio中取消选中Suppress jit optimization on module load复选框,你将能够看到优化的代码,但要小心,因为在这种模式下,某些断点永远不会被击中。例如,如果方法是内联的,那么它将永远不会被调用,之后断点将不起作用。