edika ha scritto:
Ciao Stefano,
in realta il messaggio è un email ma di un sistema di messaggistica interna all'azienda, e gli allegati devono essere conservati.
Se ho capito bene devo implementare IDisposable ed inserire nel Dispose una chiamata al metodo che distrugge gli allegati. Il Dispose dell'oggetto verrà chiamato dal GC al momento in cui verra eliminato.
Ho letto in un articolo su Devx che basta implementare il metodo Finalize per eseguire del codice che si vuole venga eseguito dalla chiamata del GC:
~MailMessage()
{
if(IsNew && HasAllegati)
{
foreach (Allegato allegato in _allegati)
{
DeleteFile(allegato.NomeFileArchivio);
}
}
}
Sarebbe corretto fare cosi nella mia classe senza implementare IDisposable?
Grazie.
Edika
Ciao, il GC si occupa di "ripulire" la memoria.
Tramite Dispose non "forzi" il GC anche perchè, fortunatamente, il passaggio del GC non è deterministico e non può essere invocato.
Tramite Dispose non fai altro che "marcare" l'oggetto e "liberare" tutte le sue risorse. Un metodo Dispose deve chiamare il metodo SuppressFinalize (marcatura) per l'oggetto che viene eliminato. Se l'oggetto si trova nella coda di finalizzazione, SuppressFinalize impedisce che venga chiamato il relativo metodo Finalize e il GC si occupa solo di "ripulire" la memoria. Tieni presente che l'esecuzione di un metodo Finalize incide notevolmente sulle prestazioni. Pertanto, se il metodo Dispose ha già eseguito le operazioni di pulitura sull'oggetto, non occorre che il Garbage Collector chiami il relativo metodo Finalize.