ViewState e Datatable

martedì 17 marzo 2009 - 21.31

lluberti Profilo | Newbie

Salve a tutti,
in una web application utilizzo il viewstate per memorizzare informazioni all'interno di una datatable che mi permettono di creare dinamicamente la pagina web tra un postback e l'altro.
E' una maniera corretta di procedere ?

Il dubbio mi viene perchè in questo modo, quando l'utente passa ad un'altra pagina non ho la possibilità di effettuare il dispose della datatable.

Questo può provocare un memory leak?

Grazie

alx_81 Profilo | Guru

>Salve a tutti,
Ciao!

>in una web application utilizzo il viewstate per memorizzare
>informazioni all'interno di una datatable che mi permettono di
>creare dinamicamente la pagina web tra un postback e l'altro.
>E' una maniera corretta di procedere ?
Puoi pensare di non mettere nel viewstate, ma di usare il caching integrato in asp.net.
Ma questo se la datatable la leggi da una risorsa esterna (vedi database, file di testo, xml, ecc).
In poche parole puoi farti un metodo statico che controlla se il datatable esiste già nella cache locale. In caso positivo usi quello, altrimenti fai la "query" per ricavare una nuova versione dell'oggetto.

>Il dubbio mi viene perchè in questo modo, quando l'utente passa
>ad un'altra pagina non ho la possibilità di effettuare il dispose
>della datatable.
>Questo può provocare un memory leak?
Beh, avendolo scritto nel viewstate, la dispose puoi farla dopo averlo memorizzato nel viewstate

Comunque qui il link per capire il caching di asp.net
http://msdn.microsoft.com/it-it/library/xsbfdd8c(VS.80).aspx

>Grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

lluberti Profilo | Newbie

Grazie molte !!!
Sei stato preziosissimo!

lluberti Profilo | Newbie

Scusa io nel mio codice il viewstate lo gestisco in questa maniera

private DataTable myTabella {
get {
object o = ViewState["myData"];
return (DataTable)o;
}
set {
ViewState["myData"] = value;
}
}



Ho notato che nel set mi ci va solo quando assegno qualcosa alla datatable .
Dove lo dovrei maettere il dispose ? nel set subito dopo il ViewState["myData"] = value ?

Grazie

alx_81 Profilo | Guru

>Ho notato che nel set mi ci va solo quando assegno qualcosa alla
>datatable .
>Dove lo dovrei maettere il dispose ? nel set subito dopo il
>ViewState["myData"] = value ?
usa la using, che ti gestisce il rilascio della memoria:

Istruzione using (c#)
http://msdn.microsoft.com/it-it/library/yh598w02(VS.80).aspx


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

lluberti Profilo | Newbie

Scusa se ti assillo ma credo di non essere stato abbastanza chiaro.

Cerco di spiegarmi meglio:

Nella classe webform ho dichiarato questa proprietà

private DataTable myTabella {
get {
object o = ViewState["myData"];
return (DataTable)o;
}
set {
ViewState["myData"] = value;
}
}

poi nei vari metodi della webform utilizzo la datatable myTabella per salvarmi delle informazioni (aggiungo rows, modifico rows etc).
Ora io non posso mai fare il dispose di myTabella perchè le informazioni che ci scrivo me le passo tra un postback e l'altro.
Ho il sospetto che questa gestione causi una perdita di memoria. Potrebbe essere ??
Se si quali sono le correzioni che dovrei fare secondo te per evitare ciò ?

Grazie per la pazienza

alx_81 Profilo | Guru

>Ora io non posso mai fare il dispose di myTabella perchè le informazioni
>che ci scrivo me le passo tra un postback e l'altro.
ma tra un postback e l'altro, le passi sul viewstate, la data
>Ho il sospetto che questa gestione causi una perdita di memoria.
>Potrebbe essere ??
>Se si quali sono le correzioni che dovrei fare secondo te per
>evitare ciò ?
Se tu leggi ad ogni postback dal viewstate e scrivi sul viewstate prima del postback, usa la using per il tuo datatable che ti fa il dispose in automatico, così eviti perdite di memoria .
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5