Controlla meglio usando il tracing di ASP.NET o il profiler di Visual Studio. Casomai posta i dati che riesci a raccogliere.
Comprendi bene che se la funzione Page_Init è vuota, cioè non ha istruzioni al suo interno, non può rallentare in alcun modo l'esecuzione del thread. Forse il problema è altrove, come su eventuali operazioni che svolgi nel Session_Start del global.asax, oppure in un HttpModule.
Il metodo Page_Init è vuoto, come anche Session_Start.
Utilizzo controlli di terze parti, quindi il problema potrebbe esser dovuto ad un bug sul loro codice.
Di seguito il trace:
Categoria Messaggio Dai primi Dagli ultimi
aspx.page End PreInitaspx.page Begin Init 0,00 0,00
aspx.page End Init 5,37 5,37
aspx.page Begin InitComplete 5,37 0,00
aspx.page End InitComplete 5,37 0,00
aspx.page Begin PreLoad 5,38 0,00
aspx.page End PreLoad 5,38 0,00
aspx.page Begin Load 5,38 0,00
aspx.page End Load 8,68 3,30
aspx.page Begin LoadComplete 8,68 0,00
aspx.page End LoadComplete 8,68 0,00
aspx.page Begin PreRender 8,68 0,00
aspx.page End PreRender 13,70 5,02
aspx.page Begin PreRenderComplete 13,70 0,00
aspx.page End PreRenderComplete 13,70 0,00
aspx.page Begin SaveState 13,86 0,16
aspx.page End SaveState 13,87 0,01
aspx.page Begin SaveStateComplete 13,87 0,00
aspx.page End SaveStateComplete 13,87 0,00
aspx.page Begin Render 13,87 0,00
aspx.page End Render 14,17 0,30
Il Page_Init è istantaneo appena avviato l'applicativo, poi, man mano che si servono utenti le prestazioni calano ed il ritardo accumulato in quel punto aumenta. Dopo circa 1000 sessioni servite (e solo una decina di sessioni attive) ottengo il ritardo di oltre 5 sec.
La pagina tracciata è la più complessa dell'applicativo e conta oltre 700 check su una singola pagina.
Le cause dei 3.3 sec nel load sono già state individuate e sono già al lavoro sull'ottimizzazione di alcuni metodi richiamati.
Anche la fase di PreRendering sembra esser critica, ma essendo la pagina piuttosto corposa, potrebbe anche starci...
Non ho mai avuto occasione di usare il Profiler... faccio qualche prova.
Mi sembra molto, ma non conoscendo la tua applicazione non posso stabilire se quei 500KB siano evitabili o meno.
Ad ogni modo, questi oggetti *non dovrebbero* essere la causa del problema perché quando usi la modalità in-process, non avviene alcuna (de)serializzazione e quindi l'accesso a tali oggetti dovrebbe essere sempre abbastanza rapido (finché c'è sufficiente RAM disponibile).
I 500KB sono evitabili riscrivendo la logica dell'applicazione. Non avendo avuto fino ad oggi evidenza di problemi dovuti ad un uso un po' più corposo della Session ho deciso di avvalermi ed usare gli oggetti provenienti direttamente dal Business Layer.
La Ram disponibile sul server è sufficiente a servire un numero nettamente superiore di utenti di quelli effettivamente da servire nelle condizioni più pessimistiche.
Modificato da stewe il 09 giugno 2014 10.30 -
Modificato da stewe il 09 giugno 2014 10.30 -