¿El recolector de basura llama a Dispose ()?

Pensé que el GC llamaría a Dispose eventualmente si tu progtwig no lo hiciera pero que deberías llamar a Dispose () en tu progtwig solo para hacer la limpieza determinista.

Sin embargo, desde mi pequeño progtwig 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).

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

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 ()”?