Un seguimiento de Does .NET JIT optimize empty loops away?:¿Hay alguna forma de obtener el compilador .NET JIT o C# para optimizar los bucles for-out vacíos?
El siguiente programa ejecuta un bucle vacío mil millones de veces e imprime el tiempo de ejecución. Se necesitan 700 ms en mi máquina, y tengo curiosidad si hay una forma de obtener la inestabilidad para optimizar el bucle vacío.
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);
}
}
}
Por lo que yo puedo decir que la respuesta es no, pero no sé si hay opciones de compilación ocultos Puede que no he probado. Me he asegurado de compilar en modo de lanzamiento y ejecutar sin ningún tipo de depurador conectado, pero todavía se están tomando 700 ms para ejecutar este ciclo vacío. También probé NGEN con el mismo resultado (aunque tengo entendido que debería producir el mismo código compilado que el JIT de todos modos, ¿no?). Sin embargo, nunca antes había usado NGEN y podría estar mal.
Se parece como esto sería algo fácil para el JIT para encontrar y optimizar distancia, pero sabiendo muy poco sobre cómo el nerviosismo trabajo en general, estoy ansioso por ver si hay una razón específica esta optimización se habría quedado fuera . También el compilador de VC++ definitivamente parece hacer esta optimización, entonces me pregunto por qué la discrepancia. ¿Algunas ideas?
¿Por qué es esto un problema para usted en realidad? Si tienes un bucle vacío, deshazte de él. –
¿En qué se diferencia esto de la pregunta a la que hace referencia? –
@Reed Sé que Java tiene opciones de JIT como servidor y cliente. La pregunta de referencia no pregunta nada sobre las opciones que pueden engatusar la inestabilidad para optimizar esto. –