un follow-up a Does .NET JIT optimize empty loops away?:C'è un modo per ottenere il compilatore .Net JIT o C# per ottimizzare i cicli di apertura a vuoto?
Il seguente programma appena viene eseguito un loop vuoto un miliardo di volte e stampa il tempo di correre. Ci vogliono 700 ms sulla mia macchina, e sono curioso di sapere se c'è un modo per far sì che il jitter ottimizzi il ciclo vuoto.
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);
}
}
}
Per quanto posso dire la risposta è no, ma non so se ci sono opzioni di compilazione nascoste forse non avrei provato. Ho fatto in modo di compilare in modalità di rilascio ed eseguire senza debugger collegato, ma sono ancora in corso 700 ms per eseguire questo ciclo vuoto. Ho anche provato NGEN con lo stesso risultato (anche se la mia comprensione è che dovrebbe comunque produrre lo stesso codice compilato del JIT, giusto?). Comunque non ho mai usato NGEN prima e forse lo sto usando male.
E Sembra come questo sarebbe qualcosa di facile per il JIT per trovare e ottimizzare via, ma conoscendo molto poco su come nervosismi lavoro in generale, io sono curioso di sapere se c'è un motivo specifico questa ottimizzazione sarebbe stato lasciato fuori . Anche il compilatore VC++ sembra davvero fare questa ottimizzazione, quindi mi chiedo perché la discrepanza. Qualche idea?
Perché questo è un problema per te in realtà? Se hai un ciclo vuoto, liberati di esso. –
Com'è diverso dalla domanda a cui fai riferimento? –
@Reed so che java ha opzioni JIT come server e client. La domanda di riferimento non chiede nulla sulle opzioni che possono indurre il jitter a ottimizzarlo. –