因此,如果我只想在调试时查看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优化代码?
因此,答案非常简单,您只需取消Suppress jit optimization on module load
选中Visual Studio中的复选框,就可以看到优化的代码,但是要小心,因为在这种模式下,某些断点永远不会出现。例如,如果内联方法,则将永远不会调用此方法,因为此后的断点将不起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句