implementar - implements idisposable dispose c#
¿El recolector de basura llama a Dispose()? (2)
El GC no llama a Dispose
, llama a su finalizador (que debe hacer llamar Dispose(false)
).
Mire las publicaciones relacionadas en el lateral o busque las mejores prácticas de C # para el patrón Dispose (Los documentos de IDisposable
explican bastante bien IIRC).
Esta pregunta ya tiene una respuesta aquí:
Pensé que el GC llamaría a Dispose eventualmente si tu programa no lo hiciera pero que deberías llamar a Dispose () en tu programa solo para hacer la limpieza determinista.
Sin embargo, desde mi pequeño programa de prueba, no veo Dispose llamarse en absoluto ...
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");
}
}
// La salida es solo "Constructor", no obtengo "Dispose" como esperaría. ¿Que pasa?
EDITAR: Sí, sé que debería llamar a Dispose (): sigo el patrón estándar cuando uso objetos desechables. Mi pregunta surge porque estoy tratando de rastrear una fuga en el código de alguien más, que es C ++ administrado (otra capa de complejidad que sería el buen tema de otro hilo).
La respuesta corta es "no". Se pueden encontrar respuestas más detalladas en mis respuestas a "¿Es una mala práctica depender del recolector de basura .NET?" Y "¿Qué sucede si no llamo Dispose ()"?