Я серьезно сомневаюсь в том, что компиляторы С# или .NET JIT выполняют любую полезную оптимизацию, а тем более, если они действительно конкурентоспособны с самыми базовыми в компиляторах на С++.
Рассмотрим эту чрезвычайно простую программу, которую мне удобно сделать действительной как на С++, так и на С#:
#if __cplusplus
#else
static class Program
{
#endif
static void Rem()
{
for (int i = 0; i < 1 << 30; i++) ;
}
#if __cplusplus
int main()
#else
static void Main()
#endif
{
for (int i = 0; i < 1 << 30; i++)
Rem();
}
#if __cplusplus
#else
}
#endif
Когда я компилирую и запускаю его в новейшей версии С# (VS 2013) в режиме выпуска, он не завершается в течение разумного промежутка времени.
Изменить: Здесь еще один пример:
static class Program
{
private static void Test2() { }
private static void Test1()
{
#if TEST
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2(); Test2();
#else
Test2();
#endif
}
static void Main()
{
for (int i = 0; i < 0x7FFFFFFF; i++)
Test1();
}
}
Когда я запускаю этот, он занимает лот дольше, если TEST
определен, хотя все это не-op, а Test2
должен быть встроен.
Даже самые древние компиляторы С++, которые я могу взять в руки, однако, оптимизируют все, делая программы немедленно.