ASP.NET WEB APP Problema di memoria, memory leak, chiusura connessioni...

giovedì 27 maggio 2010 - 19.30

colale Profilo | Newbie

Ciao a tutti!!

Il mio Shared Hoster da poco ha cambiato il limite massimo di memoria per ogni sito, settando l'app pool a 150MB.
Questo determina che un utente autenticato al sito dopo un po'... viene rispedito alla pagina di log-in, in quanto il sistema evidentemente ha superato il limite di memoria di cui sopra.
In un primo momento ho pensato al session timeout, ma non e' quello... confermato dall'hoster che mi dice:
- Il session timeout e' settato allo standard di 20 min.
- E' la mia applicazione che evidentemente gestisce male la memoria in quanto di solito (per altri...) il limite di 150MB e' sufficiente.
- Verifica se l'applicazione ha dei cosi' detto memory leaks (perdite di memoria...), o se le connessioni al database vengono gestite correttamente.

A questo punto... prima di pensare di cambiare Hoster mi sono detto:
Forse ad ogni pagina devo aggiungere nel "unload" dei "dispose" per oggetti e datasource che rilascino memoria...
poi ho trovato anche la gestione del GC .... ma per me' si va' un po' sul complicato...
Sono stato un po' lungo... lo so'... ma era per spiegare bene...

Grazie a tutti e a chi mi dara' un aiuto...
Ale

Gluck74 Profilo | Guru

he he he....... e come facciamo senza conoscere minimamente quello che hai fatto?

Puoi scaricare questo e-book gratuito che parla di ottimizzazione. Io non l'ho ancora letto (scaricato solo ieri), ma nel capitolo terzo (pagina 49), parla proprio di memoria.
http://downloads.red-gate.com/ebooks/DotNet/NET_Perf_and_Test_eBook.zip

ciao ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

colale Profilo | Newbie

Innanzi tutto ti ringrazio della risposta...
non sono entrato nello specifico... perche' magari c'e' qualcosa di generico da tenere in considerazione che io non conosco... e certo posso documentarmi maggiormente grazie anche al libro che mi hai segnalato...
Ma io dico:
- 150MB di memoria sono tanti o pochi.... dico nella media (bassa) di un sito non certo ultra complesso?
- Nelle pagine del sito prevalentemente ci sono BulkEditGridView, SqlDataSource, DropDownList, GridView, FormView, che per pescare i dati si collegano correttamente al SQLdatabase.
- Se ad ogni caricamento di pagina alla fine inserisco nel codice c# nell'evento "Unload" dei
BulkEditGridView1.Dispose();
BulkEditGridView2.Dispose();
BulkEditGridView3.Dispose();
e dei
SqlDataSource34.Dispose();
SqlDataSource35.Dispose();
SqlDataSource36.Dispose();
serve a qualcosa???

Gluck74 Profilo | Guru

Sinceramente non mi sono mai posto il problema e non ho mai controllato l'utilizzo di memoria di un sito.

Domanda: i controlli gridView e datasource, li hai messi nei file aspx o da codice nei cs?
Mi sfugge il controllo BulkGridView, cosa è?

ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

colale Profilo | Newbie

>Sinceramente non mi sono mai posto il problema e non ho mai controllato
>l'utilizzo di memoria di un sito.
Anch'io... sinceramente... mi sa' che la ricerca di un nuovo hoster si avvicina...


>
>Domanda: i controlli gridView e datasource, li hai messi nei
>file aspx o da codice nei cs?
Nel codice... Giusto?

>Mi sfugge il controllo BulkGridView, cosa è?
E' fantastico... guarda qui:
https://blogs.msdn.com/mattdotson/articles/490868.aspx
>
>ciao
>
>____________
>Ricordati di utilizzare il tasto "Accetta" se i nostri consigli
>ti sono serviti a risolvere il problema.
>È il modo per ringraziare chi ti ha aiutato.

Gluck74 Profilo | Guru

se il gridView ed i DataSource li hai messi da codice, allora è probabile un utilizzo eccessivo di memoria.
Dovresi mettere appunto i Dispose per ogni oggetto, inoltre potresti guardare (io non sono in grado di dirti in maniera sicura) se è il caso di andare a toccare il GarbageCollector con le isturzioni di pulitura (occhio che possono essere molto onerose se utilizzate male).

Oppure puoi utilizzare ogni controllo gridview e/o datasource all'interno di un using:

using (GridView grd1 = new GridView()) { ... ... }

In questo modo ti assicuri l'utilizzo corretto della memoria automaticamente, essendo il costrutto using adatto ad utilizzare tutti i metodi di dispose correttamente per le classi che implementano le interfacce IDisposable, come tutti i controlli.

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

colale Profilo | Newbie

Ciao Gluck74,

Devo rettificare che i controlli gridView e datasource li ho messi (nel senso che il codice che li genera e'...), nel file aspx, poi nel file cs stavo provando a vedere di dare dei "dispose" per chiuderne l'utilizzo a livello di memoria... ma il risultato none' quello sperato....
Avevo trovato il discorso dell'utilizzo di "Using" come possibile soluzione ma come faccio, visto che i controlli sono nel file aspx???

Ciao e Grazie....

ps hai visto il controllo Bulk.... come ti sembra??

Riciao

Gluck74 Profilo | Guru

Se i controlli sono nel file aspx, quello che ho detto prima non c'entra nulla.
Non puoi utilizzare using, e credo neanche il dispose.

a questo punto non saprei come mai il tuo sito impiega così tanta memoria. Bisognerebbe vedere anche la quantità di dati che vengono letti e se fai anche qualcosa di particolare da codice.

Usi dei SQLDataSource o degli ObjectDataSource?
Come primo passo proverei a disabilitare per tutti i controlli il ViewState e vedere se migliora.

Ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

colale Profilo | Newbie

Forse e' per la mole di dati....??? Nel progetto ho usato quasi sempre SQLDataSource e solo qualche Dataset nell'App_Code.
Provo a disabilitare per tutti i controlli il ViewState e vedere se migliora....
Poi ti faccio sapere...

Posso fare la prova solo su una pagina... Non devo farlo su tutte le pagine... Giusto?
Intanto provo su una....

colale Profilo | Newbie

In effetti qualcosa e' migliorato...
Sembrerebbe che prima di rimandarmi alla pagina di log-in ora devo visualizzare piu' pagine...
La prova l'ho fatta su una pagina che visualizza i dati precedentemente inseriti...
Adesso provo a disabilitare per tutti i controlli il ViewState in una pagina di inserimento/modifica dati e vediamo cosa succede...
Ma disabilitando il ViewState cosa determino...? non e' che poi mi manca qualcosa d'altro?
Grazie...
Seguiranno aggiornamenti...

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5