Ho pensato che il GC avrebbe chiamato Dispose alla fine se il tuo programma non l'avesse fatto, ma che dovresti chiamare Dispose() nel tuo programma solo per rendere deterministico il cleanup.Il garbage collector chiama Dispose()?
Tuttavia, dal mio piccolo programma di test, non vedo smaltire sempre chiamato a tutti ....
public class Test : IDisposable
{
static void Main(string[] args)
{
Test s = new Test();
s = null;
GC.Collect();
Console.ReadLine();
}
public Test()
{
Console.WriteLine("Constructor");
}
public void Dispose()
{
Console.WriteLine("Dispose");
}
}
// uscita è solo "Costruttore", non ottengo "Smaltimento" come mi aspetterei. Che cosa succede?
MODIFICA: Sì, so che dovrei chiamare Dispose() - Seguo lo schema standard quando utilizzo gli oggetti usa e getta. La mia domanda sorge perché sto cercando di rintracciare una perdita nel codice di qualcun altro, che è gestito in C++ (un altro livello di complessità che sarebbe il buon argomento di un altro thread).
Questa domanda è una copia di [http://stackoverflow.com/questions/45036/will-the-garbage-collector-call-idisposable-dispose-for -me] (http://stackoverflow.com/questions/45036/will-the-garbage-collector-call-idisposable-dispose-for-me). –