Le garbage collector appelle-t-il Dispose ()?

Je pensais que le GC appellerait éventuellement Dispose si votre programme ne le faisait pas, mais que vous devriez appeler Dispose () dans votre programme juste pour que le nettoyage soit déterministe.

Cependant, depuis mon petit programme de test, je ne vois pas Dispose se faire appeler du tout ….

public class Test : IDisposable { static void Main(ssortingng[] args) { Test s = new Test(); s = null; GC.Collect(); Console.ReadLine(); } public Test() { Console.WriteLine("Constructor"); } public void Dispose() { Console.WriteLine("Dispose"); } } 

// La sortie est juste “Constructeur”, je n’obtiens pas “Dispose” comme prévu. Quoi de neuf?

EDIT: Oui, je sais que je devrais appeler Dispose () – Je suis le modèle standard lorsque vous utilisez des objects jetables. Ma question se pose parce que j’essaye de retrouver une fuite dans le code de quelqu’un d’autre, qui est géré en C ++ (une autre couche de complexité qui serait le bon sujet d’un autre thread).

Le GC n’appelle pas Dispose , il appelle votre finaliseur (que vous devez faire appeler Dispose(false) ).

Veuillez regarder les articles connexes sur le côté ou recherchez les meilleures pratiques C # pour le modèle Dispose (Les documents sur IDisposable expliquent assez bien. IIRC.)

La réponse courte est “non”. Des réponses plus détaillées peuvent être trouvées dans mes réponses à “Est-ce une mauvaise pratique de dépendre de .NET Garbage Collector” et “Que se passe-t-il si je n’appelle pas Dispose ()”