6 messaggi dal 12 maggio 2007
Problema... Ho notato che la mia applicazione consuma un pò troppa memoria..
e genera ogni tanto un errore di questo tipo.
System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.

Ho pensato che forse il Gc no rilascia la memoria abbastanza rapidamente e ho quindi pensato di dotare le mie classi del metodo Dispose() per rimuovere esplicitamente gli oggetti dalla memoria quando necessario.

----------------------------------------------
Nel vb...
----------------------------------------------
Public Class myclass
Implements IDisposable

'codice
'codice
'codice

Sub Dispose() Implements IDisposable.Dispose
GC.SuppressFinalize(Me)
End Sub

end class

----------------------------------------------
Nella pagina...
----------------------------------------------
dim myistance as myclass = new myclass

'codice
'codice
'codice
myistance.dispose()


Può essere una soluzione efficace?? Grazie...
mmm strano, il GCè molto efficente piuttosto controlla di non cadere in cicli ricorsivi da qualche parte, in genere sono loro che causano quel tipo di errore e non l'inefficenza del GC.

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
141 messaggi dal 21 febbraio 2002
www.melisweb.eu
Non mi ricordo esattamente come funzioni il Dispose & GC...
Ma se non viene chiamato esplicitamente il GC lo chiama quando spazza la memoria.

Qualcosa può migliorare... Ma ti consiglio di liberare immediatamente quello che non ti serve anzichè aspettare di lanciare il Dispose, o peggio che lo faccia il GC.

A.

]aMelix[
-------------------------------
http://www.melisweb.eu/
http://www.puntodidomanda.com/
http://www.cucinamore.com/
-------------------------------
il GC non va mai chiamato esplicitamente, potrebbe avere un impatto negativo sulle prestazioni.

visto che l'algoritmo che gestisce il rilascio della memoria è altamente efficente, al massimo si può impostare a null un istanza una volta che non viene più utilizzata.

il metodo Dispose viene utilizzato per rilasciare le risorse non gestite come Streem, file ecc ecc.

chimare il metodo Dispose non chiama il GC casomai è il contrario.


ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
141 messaggi dal 21 febbraio 2002
www.melisweb.eu
io non ho detto di lanciare il GC ma di chiamare il metodo Dispose anzichè lo faccia il GC quando ha tempo.

Cmq concordo per loop/ricorsione infinita.

]aMelix[
-------------------------------
http://www.melisweb.eu/
http://www.puntodidomanda.com/
http://www.cucinamore.com/
-------------------------------
scusa se ho frainteso, il fatto che implementare il Dispose in quel caso serve a ben poco.

ciao marco
Modificato da nostromo il 28 maggio 2007 17.35 -

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
Concordo con nostrono super Maschio non che presidente onorario a vita di aspitalia.
Ma se la causa è una funzione ricorsiva non si doveva avere un'eccezione di tipo StackOverFlowException ???

imperugo
Microsoft MVP
myblog : http://www.tostring.it
effettivamente può starci anche la StackOverFlowException, alcune volte mi sono capitate tutte è due, mai dimenticarsi di chiudere le connessioni

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.