Perché dopo ogni riavvio, i miei siti .NET locali richiedono tempo per il caricamento per la prima volta? [chiuso]

26

Sto sviluppando siti basati su piattaforma .NET. Di solito distribuisco questi siti sul mio IIS locale, in modo da poterli testare e vedere la loro funzionalità prima di andare in diretta. Tuttavia, ogni volta che riavvio Windows, sembra che i siti richiedano molto tempo per essere eseguiti per la prima volta.

Conosco JIT e sono anche a conoscenza di questa domanda , ma non risponde alla mia domanda.

Il JIT si verifica ogni volta che si riavvia Windows? È legato alla creazione del processo w3wp.exe? Perché i siti sono così lenti per la prima richiesta dopo ogni riavvio?

    
posta Saeed Neamati 01.08.2011 - 12:09
fonte

4 risposte

31

Questo problema è la compilazione JIT. Il pool di applicazioni ha bisogno di tempo per costruire le librerie prima che possa iniziare ad elaborarle. Questo può essere accelerato usando uno script di riscaldamento, ma è qualcosa che deve accadere. Dipende anche dal fatto che tu stia utilizzando un sito Web o un progetto di applicazione web. Un sito web è JIT per ogni pagina, quindi il primo hit è lento e ogni nuovo hit della pagina ha anche un tempo di compilazione extra. I progetti di applicazioni Web sono precompilati e quindi non dovrebbero subire gravi conseguenze, ma le librerie devono ancora essere caricate. Più librerie / strumenti hai il peggio che questo colpo tende ad essere. Ecco alcuni link che parlano del riscaldamento:

link link link link

    
risposta data 01.08.2011 - 12:37
fonte
9

La reazione lenta alla prima richiesta è perché IIS avvia / carica un sito o un pool di applicazioni solo sulla prima richiesta in entrata. E dopo un periodo di tempo fisso, nessuna nuova richiesta in arrivo arriva al server IIS interrompe di nuovo il sito (riciclaggio del pool di app).

ASP.NET 4.0 ha una nuova funzionalità chiamata auto-start. Con questa funzione è possibile impostare un pool di applicazioni o un singolo sito per avviarsi prima di qualsiasi richiesta. Questo viene attivato all'avvio (quando IIS viene avviato) o quando si aggiorna un sito ASP.NET (che interrompe il sito).

<applicationPools>
    <add name="MyAppPool" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>

<sites>
    <site name="MySite" id="1">
        <application path="/" serviceAutoStartEnabled="true" />
    </site>
</sites>

È necessario IIS 7.5 per utilizzare questo.

C'è anche un'opzione per eseguire alcune attività extra quando l'avvio automatico si avvia, es. precaricare i dati nella cache.

    
risposta data 19.08.2011 - 15:29
fonte
2

Parte del problema è anche il GAC. Le librerie posizionate devono essere sottoposte a controlli di sicurezza ogni volta che vengono caricate, il che significa che viene eseguito un intero carico di lavoro di tipo di crittografia e questo rallenta molto. C'è stato un discorso sulle prestazioni della WPF qualche tempo fa da MS che descriveva questo problema - la loro risposta era "non mettere roba nella GAC se non puoi aiutarla"

    
risposta data 01.07.2012 - 16:32
fonte
1

IIS ha una caratteristica fastidiosa (a volte) per i siti web a basso traffico. Ricicla i processi di lavoro inutilizzati - che causano il primo utente al sito; ritardo a volte estremamente lungo (30+ secondi). link

    
risposta data 24.03.2014 - 11:57
fonte

Leggi altre domande sui tag