Последующий раздел делает .NET JIT оптимизировать пустые петли? :
Следующая программа просто работает пустой петлей A миллиард раз и отпечатывает время пробега. На моей машине требуется 700 мс, и мне интересно, если есть способ получить джиттером оптимизировать пустой петлей.
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 с тем же результатом (хотя мое понимание заключается в том, что он должен производить тот же скомпилированный код, как джит в любом случае, верно?). Однако я никогда не использовал NGEN до и может быть неправильно использовать.
Это , похоже, , как кажется , как это было бы что-то легко для JIT, чтобы найти и оптимизировать, но знание очень мало о том, как Jitters работают в целом, мне интересно, если есть определенная причина, по которой эта оптимизация будет иметь был оставлен. Также Compiler VC ++ определенно делает эту оптимизацию, поэтому мне интересно, почему несоответствие. Любые идеи?