2012-11-17 19 views
7

Devo memorizzare i dati di migliaia di record in una tabella di dati e mantenuti sul postback. Quale opzione è adatta per me viewstate (che ho usato) o sessione. Quando ho usato viewstate creerà un campo nascosto per archiviarlo e rallentare il caricamento della pagina. Quindi c'è un sovraccarico (consumo della memoria lato server e ritardo nelle risposte) nella memorizzazione in sessione. Per favore suggeriscimi la soluzioneQuale è meglio per prestazioni viewstate o sessione

+1

Si consiglia di non memorizzare migliaia di record in seduta o sullo stato di visualizzazione. –

+0

Qual è la migliore pratica quindi –

+1

Recupera solo i dati che sono richiesti sulla pagina. Ad esempio se stai usando la tabella dati per collegare la griglia. Quindi la tabella dei dati dovrebbe contenere solo i dati richiesti nella pagina corrente di gridview. –

risposta

12

Per grandi quantità di dati, la sessione è molto più efficiente. Se è possibile rilevare quando l'utente ha finito con un particolare blocco di dati, impostare la variabile Session su null, per aiutare l'overhead della memoria. Non è sempre possibile farlo, ma alla fine la sessione scadrà e la memoria verrà recuperata. Abbassare il timeout della sessione può aiutare alcuni, ma non impostarlo troppo piccolo, non vuoi tagliare i tuoi utenti. La sessione deve essere abilitata nel file Web.config.

Ecco le indicazioni di base per sessione vs ViewState:

ViewState: La struttura di dati binari del ViewState è codificato Base64 da inserire nella pagina, il che significa che è 1,3333 volte (8/6) la dimensione dei dati binari originali. Questi dati vengono caricati e scaricati per ogni visualizzazione di pagina. Quindi se hai molto nel ViewState incide sui tempi di risposta della pagina. La codifica Base64 è probabilmente altamente ottimizzata, quindi non è un successo in termini di prestazioni. Ogni richiesta di pagina alloca, quindi libera, lo spazio per ViewState, quindi non è un colpo di memoria a lungo termine. Poiché i dati sono nella pagina, non scade.

Sessione: tutti i dati nella sessione vengono conservati nel server Web tra i carichi di pagina. Ciò mantiene la pagina piccola, deve solo portare l'identificatore di sessione. Sul lato negativo, qualsiasi memoria utilizzata per memorizzare i dati nella Sessione rimane allocata fino alla scadenza della sessione. Mi sono chiesto se la Session copia dati binari o semplicemente mantiene un puntatore. Come la codifica Base64, questo può essere altamente ottimizzato, quindi se succede non è un successo in termini di prestazioni. La sessione potrebbe scadere se l'utente attende troppo tempo tra le visualizzazioni di pagina. Se la sessione scade, dovrebbe restituire l'utente ad uno stato conosciuto nella pagina web.

Un altro problema qui, se si memorizzano le informazioni nella Sessione, l'ID di sessione può essere condiviso tra più schede nel browser client. Devi stare attento a come stai usando i dati memorizzati nella sessione. Assicurati di testarlo per evitare che i tuoi utenti ottengano risultati imprevisti.

(Nota: L'uso ViewState è riposante, sessione non è.)

+0

Cosa succede se utilizzo esclusivamente variabili di sessione invece di viewstate? –

+0

Viewstate è più durevole, dal momento che è gestito dal browser dell'utente. Quindi, anche se un utente si siede su una pagina per un'ora, quindi fa clic da qualche parte, la pagina manterrà comunque il viewstate, mentre la sessione probabilmente sarà scaduta. Il trucco è trovare il giusto equilibrio. – gmlobdell

+0

Sì, hai ragione ma voglio qualcosa di diverso, quale sarà il consumo di memoria e il tempo richiesto durante il caricamento della pagina in entrambi i casi –

Problemi correlati