pattern implementar funciona example como collector c# .net memory dispose garbage-collection

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).