me hizo una question acerca de este método:¿Cuándo desechar y por qué?
// 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();
}
en la respuesta que me dieron esto como una observación añadida:
asegurarse de que siempre eliminar Recursos desechables tales como arroyos y lectores de texto y escritores. Este no parece ser el caso en su método SerializeObject.
Por lo tanto, puedo decir que esto va a parecer supercoco para alguien que ha estado codificando C# durante un año o dos, pero ¿por qué tengo que deshacerme de él?
Se ve que testWriter
tiene un método de eliminación, pero ¿no debería la recolección de basura ocuparse de eso? Vine de Delphi a C#. En Delphi tuve que limpiar todo, así que este no es un caso de mí que quiera ser flojo. Me acaban de decir que si fuerza a liberar la memoria que toman sus objetos, entonces puede causar problemas. Me dijeron que "Simplemente deja que el recolector de basura lo haga".
- Entonces, ¿por qué debo llamar a deshacerme? (Mi suposición es que es porque
textWriter
toca el disco.) - ¿Hay una lista de objetos con los que debo tener cuidado? (¿O una manera fácil de saber cuándo debo llamar a deshacerse?)
Relacionado: http://stackoverflow.com/questions/1691846/does-garbage-collector-call-dispose –
Tengo entendido que hace que el GC sepa que esto está listo para la recolección, en lugar de tener que verificar si está listo.Además, puede decirle al GC que recopile "temprano" este elemento, en lugar de que el marco quede colgado por un tiempo "por las dudas" http://www.devx.com/dotnet/Article/33167 – jcolebrand
@drachenstern - concepto erróneo popular, pero incorrecto. Dispose simplemente le proporciona un mecanismo para cerrar a la fuerza los recursos no administrados, como los identificadores de archivos o los sockets de red, tan pronto como haya terminado con ellos sin esperar al recolector de elementos no utilizados. No indica al GC que recoja el objeto. – Paolo