关于此问题(Does .NET JIT optimize empty loops away?)的跟进:
以下程序运行了一个空循环十亿次并打印出运行时间。在我的机器上需要 700 毫秒,我想知道是否有办法让JIT编译器优化掉这个空循环。
using System;
namespace ConsoleApplication1 {
class Program {
static void Main() {
var start = DateTime.Now;
for (var i = 0; i < 1000000000; i++) {}
Console.WriteLine((DateTime.Now - start).TotalMilliseconds);
}
}
}
据我所知,答案是否定的,但我不知道是否有隐藏的编译器选项我没有尝试过。我已经确保在发布模式下编译并且没有附加调试器,但是仍然需要700毫秒来运行这个空循环。我也尝试过使用NGEN得到了相同的结果(尽管我理解它应该产生与JIT相同的编译代码,对吗?)。但是我以前从未使用过NGEN,可能用错了方法。看起来这似乎是JIT可以轻松找到并优化掉的东西,但由于我对jitters的工作原理知之甚少,我想知道为什么会忽略这种优化。此外,VC++编译器确实似乎做出了这种优化,那么为什么会有差异呢?有什么想法吗?