Domanda

Dire se il mio codice verrà sempre eseguito su un determinato processore e se ho queste informazioni durante l'installazione - c'è qualche possibilità che io possa evitare JIT?

È stato utile?

Soluzione

Non è necessario evitare JIT se al momento dell'installazione sono disponibili informazioni sulla CPU.

Se compili i tuoi moduli usando l'opzione / platform: [x86 / x64 / IA64], il compilatore includerà queste informazioni nel file PE risultante in modo che CLR inserirà il codice nel codice nativo della CPU appropriato e ottimizzerà il codice per quell'architettura CPU.

Puoi utilizzare NGEN , sì, ma solo se si desidera migliorare l'avvio dell'applicazione a causa della riduzione del working set nei processi in esecuzione perché non si sarebbe evitato JITting. E devi effettivamente confrontare le prestazioni dei file NGEN con quelle dei file non NGEN per assicurarti che quello NGEN sia più veloce.

NGEN non può fare tante ipotesi sull'ambiente di esecuzione quante ne può fare il compilatore JIT e quindi produrrà codice non ottimizzato.

Ad esempio: aggiunge riferimenti indiretti per l'accesso ai campi statici perché effettivi l'indirizzo dei campi statici è noto solo in fase di esecuzione.

Altri suggerimenti

Usa NGEN :

  

Native Image Generator (Ngen.exe) è uno strumento che migliora le prestazioni delle applicazioni gestite. Ngen.exe crea immagini native, che sono file contenenti codice macchina compilato specifico del processore e le installa nella cache delle immagini native sul computer locale. Il runtime può utilizzare immagini native dalla cache invece utilizzando il compilatore just-in-time (JIT) per compilare l'assembly originale ...

     

Per ulteriori informazioni sull'uso di Ngen.exe e del servizio di immagini native, vedere Native Image Service ...

NGEN è la risposta ovvia, ma vorrei sottolineare che il codice JIT può essere più veloce come "sa" " su cose in fase di esecuzione che NGEN non può. Usiamo questo fatto per eliminare letteralmente righe di codice sul pavimento in fase di esecuzione in base a un'impostazione nei nostri file .config:

static readonly bool _EnableLogging = LoadFromConfigFile("EnableLogging");
if (_EnableLogging && log.IsDebugEnabled)
{
   //Do some logging
}

In questo esempio NGEN deve lasciare l'istruzione if nel codice perché non ha idea di quale sia il valore del campo _EnableLogging. Tuttavia, JIT conosce il valore di this e, se è falso, non è possibile che l'istruzione if verrà mai elaborata e JIT ometterà letteralmente l'intera istruzione if dal codice macchina che genera, risultante in una base di codice più piccola e quindi una base di codice più veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top