Ho chiesto a un question su questo metodo:Quando smaltire e perché?
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
nella risposta che ho ricevuto questo come un'osservazione aggiunto:
Assicurarsi di sempre smaltire risorse disponibili, come ruscelli e lettori di testo e scrittori. Questo non sembra essere il caso nel tuo metodo SerializeObject.
Quindi, posso dire che questo sembrerà superfelico per qualcuno che ha codificato C# per un anno o due, ma perché devo smaltirlo?
Si vede che testWriter
ha un metodo di smaltimento, ma la raccolta dei dati inutili non dovrebbe occuparsene? Sono venuto da Delfi a C#. In Delphi ho dovuto ripulire tutto, quindi questo non è il caso di me che voglio essere pigro. Mi è stato appena detto che se costringi a liberare la memoria che i tuoi oggetti occupano, allora può causare cose cattive. Mi è stato detto di "Lascia fare il garbage collector".
- Quindi, perché è necessario chiamare dispose? (La mia ipotesi è che sia perché il
textWriter
colpisce il disco.) - C'è una lista di oggetti con cui devo stare attento? (O un modo semplice per sapere quando devo chiamare dispose?)
Correlati: http://stackoverflow.com/questions/1691846/does-garbage-collector-call-dispose –
La mia comprensione è che fa sì che il GC a sappi che questo è pronto per la raccolta, invece di dover controllare per vedere se è pronto.Inoltre, puoi dire al GC di raccogliere "in anticipo" su questo elemento, invece del framework che vi si appende per un po '"just in case" http://www.devx.com/dotnet/Article/33167 – jcolebrand
@drachenstern - malinteso popolare, ma errato. Dispose ti fornisce semplicemente un meccanismo per chiudere forzatamente le risorse non gestite come handle di file o socket di rete non appena hai finito con loro senza aspettare il garbage collector. Non segnala al GC di raccogliere l'oggetto. – Paolo