47 messaggi dal 18 settembre 2006
Contributi
fabrica ha scritto:
è SEMPRE necessario disposare tutti gli oggetti che implementano l'interfaccia IDisposable proprio per "marcare" gli oggetti che dovranno essere gestiti dal GC


Direi proprio di no. A che servirebbe la garbage collection se non a spostare l'onere del cleanup dallo sviluppatore al runtime?
No, non è sempre necessario. E' meglio farlo, sono d'accordo; ma se ciò non viene fatto sarà il runtime ad effettuare il Dispose() per conto dello sviluppatore.

Inoltre gli oggetti non vengono "marcati" per essere gestiti dal GC: tutti gli oggetti managed vengono gestiti, prima o poi, dal GC. Forse ti stavi riferendo alla finalizzazione?

Efran Cobisi
Solution developer, consultant and trainer
MCAD, MCT, MCTS: SQL Server 2005
efran.cobisi ha scritto:
fabrica ha scritto:
è SEMPRE necessario disposare tutti gli oggetti che implementano l'interfaccia IDisposable proprio per "marcare" gli oggetti che dovranno essere gestiti dal GC

Beh, direi proprio di si.

Direi proprio di no. A che servirebbe la garbage collection se non a spostare l'onere del cleanup dallo sviluppatore al runtime?
No, non è sempre necessario. E' meglio farlo, sono d'accordo; ma se ciò non viene fatto sarà il runtime ad effettuare il Dispose() per conto dello sviluppatore.

Solo il Garbage collection ha l'onere / onore di liberare fisicamente la memoria. Se non viene invocato il Dispose da parte del programmatore l'area di memoria rimarrà occupata fino al successivo passaggio del GC.

Quindi se non "disposo" gli oggetti che implementano l'interfaccia IDisposable sarò certo di "allungare la vita" a quella parte di memoria perchè sarà il GC che si occuperà di "disposare" gli oggetti senza liberare la memoria. Solo al successivo passaggio del GC verrà liberata fisicamente la memoria.

Un doppio round trip del GC non sembra il massimo dell'ottimizzazione, concordi ?


Inoltre gli oggetti non vengono "marcati" per essere gestiti dal GC: tutti gli oggetti managed vengono gestiti, prima o poi, dal GC. Forse ti stavi riferendo alla finalizzazione?

Il metodo Finalize viene chiamato automaticamente dopo che un oggetto è divenuto inaccessibile, a meno che l'oggetto non sia stato esonerato dalla finalizzazione attraverso una chiamata al metodo SuppressFinalize. Quindi...

Bella discussione, non c'è che dire.

Ciao

Fabrizio Canevali
47 messaggi dal 18 settembre 2006
Contributi
Bella discussione, non c'è che dire.


In effetti siamo un po' OT... Ma anche questo è bello! :)

fabrica ha scritto:
è SEMPRE necessario disposare tutti gli oggetti che implementano l'interfaccia IDisposable proprio per "marcare" gli oggetti che dovranno essere gestiti dal GC


Ciò che ti contesto è l'utilizzo del termine "necessario", non appropriato.
Supponiamo, ad esempio, che io utilizzi in un mio software un'istanza della classe Bitmap per creare e manipolare un'immagine raster; come ben saprai, Bitmap (anzi, Image per essere precisi) implementa IDisposable. Se non invoco il metodo Dispose() dell'istanza il software funziona perfettamente. Quindi non è "necessario" invocare Dispose(), anche se è altamente consigliabile farlo, al fine di liberare le risorse di sistema il prima possibile.

Solo il Garbage collection ha l'onere / onore di liberare fisicamente la memoria. Se non viene invocato il Dispose da parte del programmatore l'area di memoria rimarrà occupata fino al successivo passaggio del GC.


Sono d'accordo.

Quindi se non "disposo" gli oggetti che implementano l'interfaccia IDisposable sarò certo di "allungare la vita" a quella parte di memoria perchè sarà il GC che si occuperà di "disposare" gli oggetti senza liberare la memoria. Solo al successivo passaggio del GC verrà liberata fisicamente la memoria.


Certamente.

Un doppio round trip del GC non sembra il massimo dell'ottimizzazione, concordi?


Qui stai parlando di ottimizzazione! Concordo, se vuoi ottimizzare è meglio effettuare il Dispose() degli oggetti: ma farlo, ripeto, non è necessario.

Ciao

Efran Cobisi
Solution developer, consultant and trainer
MCAD, MCT, MCTS: SQL Server 2005
 E vabbe, forse sarò un filo pignolo ma per rientrare nel merito di questo post e uscire un pelino dai nostri OT ritengo che le n istanze dell'oggetto mail debbano essere "disposate", potrebbero essere centinaia o migliaia quindi liberare l'heap al primo passaggio del GC è cosa buona e giusta.

Sono assolutamente daccordo con te che non è sempre necessario "disposare" gli oggetti ma è buona regola riconoscere gli oggetti per non trovarsi ad affrontare spiacevoli sorprese. Se poi vogliamo considerare che nel 90% dei casi le web application girano su spazi hosting vien da se che le risorse condivise vanno trattate con estrema cautela.

Dispostate gente, disposate ...

Ciao

Fabrizio Canevali
102 messaggi dal 08 gennaio 2007
"fabrica" <fabrica> ha scritto nel messaggio news:306451@...

Dispostate gente, disposate ...

Io ho già disposto e tu?

hehehehehehe



Saluti @ndrea
vta ha scritto:
"fabrica" <fabrica> ha scritto nel messaggio news:306451@...
Dispostate gente, disposate ...

Io ho già disposto e tu?

hehehehehehe



Saluti @ndrea
Ciao Andrea,

benvenuto nel duro mondo dei disposatori

E che lo sforzo sia con te

Fabrizio Canevali
102 messaggi dal 08 gennaio 2007
"fabrica" <fabrica> ha scritto nel messaggio news:306459@...

Ciao Andrea,

benvenuto nel duro mondo dei disposatori

E che lo sforzo sia con te

Grazie per la benedizione!
:-)

Saluti @ndrea
1 messaggio dal 19 febbraio 2007
Ciao a tutti,

leggendo la discussione mi è sorto un dubbio, se voglio gestire una mailing list supponiamo che ho una cinquantina di indirizzi, spedisco una mail per ogni indirizzo e fin qui tutto bene; che succede nel caso io voglia inserire un allegato??? Spedire 50 mail con un allegato di 1 mb in che modo andrebbe ad impattare sulle prestazione della mia applicazione web e soprattutto sul server?

grazie mille.

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.