2010-02-08 15 views
6

Ho un'applicazione web scritta in ASP.Net 3.0 utilizzando C#, la macchina di produzione è un Windows 2003 Server con IIS 6.0 e di SQL Server 2005.applicazione ASP.Net scorre lento a prima volta

Applicazione Struttura

il seguente mostra la struttura della mia applicazione web ASP.net:

applicazione radice in IIS (// localhost/ES) comprende le pagine comuni, per esempio: pagine master, tema, il controllo dell'utente, la cartella immagini . numero di sotto-progetti sotto l'applicazione radice (// localhost/es/sotto-progetto). eliminare web.config nei sottoprogetti assemblare i file di sottoprogetti è sotto la cartella bin dell'applicazione radice (proprietà del sottoprogetto >> compila >> percorso di generazione build: .. \ bin \ la mia applicazione è a 3 livelli applicazione web (strato biasness, strato di dati e lo strato di presentazione. Inoltre, ogni pagina aspx ha il suo codice al file cs)

Impostazioni IIS

pool di applicazioni Riciclaggio del processo di lavoro dopo "1740 in minuti" Idle timeout dei processi di lavoro dopo essere stati inattivi "20 in minuti" Elaborazione ping ogni 30 secondi "Termine avvio per processer lavoratore "90 secondi" limite di tempo Shoutdown per processer lavoratore "90 Seconds"

configurazione dell'applicazione
Cache file ASP limitati in memoria "500" file ASP

cache limitate sul disco "2000"

Distribuzione applicazione:

ho pubblicare l'applicazione web con tutti i suoi file per la produzione di servire r.

Il problema:

L'applicazione viene eseguita abbastanza lento alla prima volta, ci vogliono 10 secondi verso l'alto per caricare, ma ogni al prossima volta che una pagina viene richiesta è essere più veloce. Credo che la prima volta che viene richiesta una pagina, venga compilata e in genere occorra più tempo rispetto alle altre richieste, perché la pagina si trova nella memoria cache. La domanda qui è perché ci vuole molto tempo quando si compila la pagina alla prima volta?

tentativi di risolvere il problema:

ho cercato di fare quanto segue:

  • distribuzione di una copia dei file necessari al server di produzione.
  • impostazioni di IIS cambiate, modificate Disconnes arresto del processo di lavoro
  • disattivare l'analisi
  • Spegnere stato sessione
  • Disabilita stato di visualizzazione di una pagina
  • Set debug = false nel web.config
  • Creazione di un sottoprogetto ciao mondo sotto l'applicazione radice, ci vogliono 5 secondi.
  • Creazione di un'applicazione web parola hello separata, come sopra richiede molto tempo per caricare.
  • Rimuovere il codice nel gestore di eventi page_load, ma non ha influito sulle prestazioni.
  • pubblicare solo il file necessario dell'applicazione radice (nessun codice scritto nel codice dietro), e tutti i file nel codice sorgente di sotto-progetto (codice è nel codice dietro),

Tuttavia, l'applicazione inizia ancora lentamente ma poi diventa più veloce.

Si prega di aiutare a diagnosticare e risolvere questo problema.

+0

http://stackoverflow.com/questions/13386471/fixing-slow-initial-load-for-iis –

risposta

-4

Non c'è modo di aggirare questo. Avrai sempre un leggero ritardo al primo caricamento mentre il sito viene compilato.

2

pubblica il sito Web, che precompila, invece di copiarlo.

Il comportamento riscontrato è normale.

5

Oltre a ciò che ha detto sky, è possibile eseguire uno "script di riscaldamento" come ultimo passaggio del processo di distribuzione. Sebbene ciò non acceleri il tempo necessario per la prima compilazione, l'utilizzo di tale script impedirebbe agli utenti di vedere un avvio lento. Date un'occhiata qui per un esempio di uno script: http://programmerramblings.blogspot.com/2008/09/aspnet-site-warmup.html

Un'altra ragione per cui la prima richiesta alla propria applicazione è lenta potrebbe essere che IIS deve iniziare il processo di lavoro asp.net durante la prima richiesta. Ciò non dovrebbe tuttavia influire sulle prime richieste ad altre pagine.

+0

auto-start applicazioni web è grande per risolvere il il più grande svantaggio delle prestazioni della prima pagina è carico ma l'applicazione non si spegne. la mia applicazione include un sacco di pagine, se uso "auto-start" o "riscaldamento" influirà sulla memoria? Il riscaldamento della dose influisce negativamente sulle prestazioni del server? C'è qualche svantaggio nell'usare lo "script di riscaldamento"? – Zahraa

1

Ho avuto lo stesso in Ruby on Rails con passeggero, ma ho trovato un bel strumento (http://www.wekkars.com) che proprio impedisce il server web di andare a dormire.

1

È inoltre possibile utilizzare la funzione di applicazione Avvio automatico disponibile per le applicazioni Web .net framework 4. Per maggiori informazioni visita il here.

0
VBscript + Dos Batch file... run every 1 hr 


Dim strNewTime , strSiteName 
strNewTime = Now() 
strNewTime = Replace(strNewTime, "/","") 
strNewTime = Replace(strNewTime, " ","") 
strNewTime = Replace(strNewTime, ":","") 

strSiteName = "https://www.yoursite.com/userlogin.aspx?dummytime=" + strNewTime 

Dim oXMLHTTP 
Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP.6.0")  

oXMLHTTP.Open "GET", strSiteName, False 
oXMLHTTP.Send 

If oXMLHTTP.Status = 200 Then 
' working 
ELSE 
    CALL SendEmail("!!! www - web site is NOT working... " + strSiteName + " *** ") 
End If 

Set oXMLHTTP = Nothing 
+1

Aggiungi commenti per descrivere in che modo la tua risposta risolve il problema. – Chrismas007

0

Ci sarà sempre un leggero ritardo sul primo carico di qualsiasi applicazione .NET a causa di componente CLR nella piattaforma .NET Framework. Poiché JIT (Just in Time) che risiede all'interno di CLR (Runtime Environment per ASP.NET) converte l'Intermediate Language (IL) in codice macchina nativo, ci vorrà sempre un po 'di più nella prima esecuzione per le applicazioni .net.

Un video dettagliato su questo tema specifico possono essere visualizzati su:

https://www.youtube.com/watch?v=ruf4U9_Rbss&index=1&list=PL8598C97BA1D871C1

Speranza che aiuta.

0

Per le applicazioni asp.net in esecuzione su IIS 7.0 e versioni inferiori, la scrittura di un programma di riscaldamento o di uno script è il modo migliore per impedire il timeout di inattività del pool di applicazioni. Questo trigger di riscaldamento può essere impostato dalla stessa applicazione o da siti Web o programmi esterni. Si possono trovare diversi modi per raggiungere lo stesso in questo article

Problemi correlati