Lorsque j'ai lu quelques articles sur la gestion de la mémoire en C#, j'ai été perturbé par les méthodes Finalizer.Bons exemples d'utilisation de Finalizers en C#
Il y a tellement de règles compliquées qui les concernent. Par exemple, personne ne sait quand les finaliseurs seront appelés, ils appellent même si le code dans ctor lance, CLR ne garantit pas que tous les finaliseurs seront appelés lorsque les programmes shutdowt, etc
Pour ce que les finaliseurs peuvent être utilisés en réel la vie?
Le seul exemple que j'ai trouvé était un programme qui bipe lorsque GC démarre.
Utilisez-vous des finaliseurs dans votre code et pouvez-vous avoir de bons échantillons?
UPD:
Finaliseurs peut être utilisé lorsque developpeurs veulent faire en sorte que une classe toujours correctement par IDisposable disposés. (link, Merci Steve Townsend)
J'ai seulement écrit une poignée de finaliseurs dans les 5 dernières années de projets sur lesquels j'ai travaillé et ils étaient tous pour des classes qui fonctionnaient avec une API non gérée héritée. En fonctionnement normal, les finaliseurs n'ont jamais été appelés, car les objets ont été éliminés avant d'être éligibles à la récupération de place, et la finalisation a été explicitement supprimée. –
@Dan Bryant - oui - n'a pas vu cela avant de faire ce point ma réponse ... –
J'ai toujours pensé que les finaliseurs étaient là pour disposer des ressources non managées comme un fail safe dans le cas où l'IDisposable.Dispose() ne s'appelle pas (SuppressFinalize –