Certamente dovremmo chiamare Dispose() su oggetti IDisposable non appena non ne abbiamo bisogno (che spesso è semplicemente lo scopo di un'istruzione "using"). Se non prendiamo questa precauzione, potrebbero accadere cose brutte, da impercettibili a show-stop.C'è un momento in cui ignorare IDisposable.Dispose?
Ma per quanto riguarda "l'ultimo momento" prima della fine del processo? Se i tuoi IDisposables non sono stati esplicitamente disposti in quel momento, non è vero che non conta più? Chiedo perché le risorse non gestite, al di sotto del CLR, sono rappresentate da oggetti del kernel e la terminazione del processo win32 libererà comunque tutte le risorse non gestite/gli oggetti del kernel. Detto diversamente, nessuna risorsa rimarrà "trapelata" dopo la fine del processo (indipendentemente dal fatto che Dispose() sia stato chiamato su IDisposables persistenti).
Qualcuno può pensare a un caso in cui la chiusura del processo lascerebbe ancora una risorsa trapelata, semplicemente perché Dispose() non è stato esplicitamente chiamato su uno o più IDisposables?
Si prega di non fraintendere questa domanda: non sto cercando di giustificare ignorando IDisposables. La domanda è solo teorico-tecnica.
EDIT: E che dire di mono in esecuzione su Linux? La cessazione del processo è altrettanto "affidabile" nel ripulire le "perdite" non gestite?
EDIT LATE: Sebbene possano esistere "altri usi" per IDisposables, il mio obiettivo è strettamente relativo alle perdite di risorse. Ho sentito due risposte: (1) se il processo si rifiuta di terminare, si avrà una perdita e (2) sì, le risorse possono perdere anche se il processo termina. Sono certamente d'accordo con l'articolo (1), anche se è al di fuori della portata di ciò che sto cercando. Altrimenti, l'oggetto (2) è esattamente quello che sto cercando, ma non posso scuotere la sensazione che sia solo un'ipotesi. Jeffrey Richter ("Windows via C/C++") spiega che un processo Win32 terminato (con grazia) non lascerà le risorse perdute o orfane. Perché un processo contenente il CLR lo cambierebbe? Dove sono la documentazione, l'esempio specifico o lo scenario teorico che dà credibilità all'idea che la capacità di pulizia del processo Win32 è compromessa quando si utilizza il CLR?
Il finalizzatore è sempre lì per prendersi cura delle risorse non gestite che non sono state smaltite. E se non funziona allora hai il sistema operativo per ripulire le schegge. –