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