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