La Finalize e' un metodo chiamato dal Garbage Collector sugli oggetti che devono essere distrutti per rilasciare in modo pulito le risorse tenute dall'oggetto stesso. Tuttavia se un oggetto candidato alla distruzione richiede la finalizzazione allora non viene distrutto immediatamente ma soltanto alla prossima esecuzione del GC.

Studiando la classe FileStream si nota che esiste il metodo Finalize che chiude lo stream e svuota i buffer. Tuttavia quando uso la classe di solito mi ritrovo a chiamare il metodo Close quando finisco di usare l'oggetto FileStream e guarda caso la Close fa le stesse cose della Finalize. Questo significa che nonostante la chiamata alla Close il Garbage Collector chiamera' la Finalize sull'oggetto che non dovra' fare nulla poiche' ho gia' fatto io Close ma avra' l'effetto di ritardare la distruzione effettiva dell'oggetto al prossimo giro del GC.

Per rendere immediata la distruzione dell'oggetto allora dopo la Close dovrei aggiungere una GC.SuppressFinalize come nel codice seguente.

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test.dat");
FileStream fs = new FileStream(path, FileMode.Create);
fs.WriteByte(1);
fs.Close();
GC.SuppressFinalize(fs);