Différence entre destructeur, d'en disposer et de finaliser la méthode
Je suis en train d'étudier comment garbage collector travaille en c#. Je suis confuse sur l'utilisation de Destructor
, Dispose
et Finalize
méthodes.
Que par mes travaux de recherche et de compréhension, d'avoir un Destructeur de la méthode dans ma classe de dire le garbage collector pour effectuer la collecte des ordures dans le chemin mentionné dans le destructeur de la méthode qui ne peut être appelé explicitement sur les instances de la classe.
La Dispose
méthode est destinée à fournir à l'utilisateur de contrôler la collecte des ordures. Le Finalize
méthode libère les ressources utilisées par la classe, mais pas de l'objet lui-même.
Je ne suis pas sûr si je comprends bien le droit chemin. Veuillez clarifier les doutes. Toutes les autres liens ou les guides sont les bienvenus.
Vous devez vous connecter pour publier un commentaire.
Destructeur appelle implicitement la méthode Finalize, ils sont techniquement identiques. Disposer est disponible avec ceux de l'objet qui implémente l'interface IDisposable.
Vous pouvez voir : Les destructeurs C# - MSDN
Exemple à partir du même lien:
Destructeur code est implicitement traduire le code suivant:
De votre compréhension pour le Destructeur est droit:
De MSDN
Collect()
méthode peut créer des problèmes de performance?En C#, un destructeur et finalizer sont fondamentalement interchangeables concepts, et devrait être utilisée pour libérer non géré ressources quand un type est recueillie, par exemple externes poignées. Il est très rare que vous devez écrire un finaliseur.
Le problème c'est que GC est non-déterministe, de sorte que le
Dispose()
méthode (viaIDisposable
) permet de soutenir déterministe de nettoyage. Ceci est sans rapport avec la collecte des ordures, et permet à l'appelant de libérer des ressources plus tôt. Il est également adapté pour une utilisation avec géré ressources (en plus gérés), par exemple si vous avez un type qui encapsule (dire) une connexion de base de données, vous pouvez disposer du type de libérer la connexion trop.Dispose()
qui serait appelé avant destruction, mais qui n'est pas visée en tant que destructeur ou finaliseur