Domanda

E 'meglio usare NGEN un'applicazione ASP.NET quando sappiamo che non ha intenzione di cambiare molto? O è il JIT abbastanza buono?

L'unica ragione per cui ho chiesto era perché questo articolo di Jeffrey Richter nel 2002, dice:

  

E, naturalmente, Microsoft sta lavorando molto difficile a migliorare la CLR   e il suo compilatore JIT in modo che corre più veloce, produce più ottimizzato   codice e utilizza la memoria in modo più efficiente. Questi miglioramenti avranno   tempo. Per gli sviluppatori che non può aspettare, il .NET Framework   Redistributable include un'utility chiamata Ngen.exe.

È stato utile?

Soluzione

NGen solo aiuterà tempo di avvio - non fa il codice eseguire più velocemente di quanto non lo farebbe dopo aver JITting. Anzi, credo che ci sono alcune ottimizzazioni che NGen non fare ma il JIT fa.

Quindi, la domanda principale è: avete un problema con il tempo di avvio? Non so quanto di tempo di avvio di un'applicazione ASP.NET sarà JITting vs altri costi, btw ... probabilmente si dovrebbe guardare i grafici Performance Manager per il JIT per dirvi quanto tempo è davvero costare .

(In termini di disponibilità, avere più server in modo da poter fare riavvio rotolamento è intenzione di darvi molto più beneficio di un singolo server con un web app NGENed.)

Altri suggerimenti

NGen non è la strada da percorrere per ASP.NET - la creazione delle DLL nella cartella bin non è il passo finale - sono compilati di nuovo con le impostazioni / maching.config web applicate nella vostra cartella C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files. Invece di NGen, per diminuire iniziale load-time, utilizzare lo strumento di pubblicazione sito Web o aspnet_compiler.exe

Non sono sicuro che il vantaggio principale di NGEN è quello di start-up tempo da solo - se la sofferenza dell'applicazione da un alto '% Tempo in JIT ', questo è elencato come un potenziale rimedio: http://msdn.microsoft.com/en-us /library/dd264972(VS.100).aspx .

La discussione è strettamente correlata ad una domanda diversa su come codice macchina JIT'd viene memorizzato nella cache e riutilizzato?

che cercavo in questa sera e mi sono imbattuto il seguente:

Il Common Language Runtime non può caricare le immagini che si creano con NGEN nel dominio applicazione condivisa. Perché assemblee standard di ASP.NET sono condivisi e vengono poi caricati in un dominio di applicazione condivisa, non è possibile utilizzare Ngen.exe per installarle nella cache delle immagini native sul computer locale. http://support.microsoft.com/kb/331979

Non so se questo si riferisce solo alle assemblee di riferimento da ASP.net app o l'applicazione stessa?

Sì lo fa, questo video di YouTube dimostra che in realtà Video di Ngen.exe ottimizzazione delle prestazioni

Ma parola di controllo cautela, controllare e poi attuarlo.

NGen aiuta il tempo di avvio. Ad esempio, il documentazione di Entity Framework dice questo circa il vantaggio di correre NGen:

  

osservazioni empirici mostrano che le immagini native dei complessi EF runtime possono tagliare tra 1 e 3 secondi di tempo di avvio dell'applicazione.

Il contesto è solo assemblee Entity Framework. NGenning altri assiemi fornirebbe ulteriore aumento di velocità.

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