Kiedy przeczytałem kilka artykułów na temat zarządzania pamięcią w C#, byłem zdezorientowany przez metody Finalizer.Dobre przykłady użycia Finalizerów w C#
Istnieje wiele skomplikowanych zasad, które się z nimi wiążą. Na przykład, nikt nie wie kiedy wywoływacze zostaną wywołani, zadzwonili nawet jeśli kod w rzutach ctor, CLR nie gwarantuje, że wszystkie finalizatory będą wywoływane, gdy programy się wyłączy itp.
Do jakich finalizatorów można użyć w rzeczywistości życie?
Jedyny przykład, który znalazłem, to program, który generuje sygnał dźwiękowy po uruchomieniu GC.
Czy używasz Finalizerów w swoim kodzie i może mieć kilka dobrych próbek?
UPD:
finalizatory mogą być stosowane, gdy developpers chcesz się upewnić, że niektóre klasy zawsze umieszczona prawidłowo przez IDisposable. (link; Dzięki Steve Townsend)
Tylko napisałem garść finalizatorów w ciągu ostatnich 5 lat projektów, nad którymi pracowałem i wszystkie były przeznaczone dla klas, które współpracowały ze starszym, niezarządzanym API. W normalnych warunkach finalizatory nigdy nie były wywoływane, ponieważ obiekty zostały usunięte, zanim zostały zakwalifikowane do zbierania śmieci, a finalizacja została wyraźnie zniesiona. –
@Dan Bryant - tak - nie widziałem tego przed zrobieniem tego punktu, moja odpowiedź ... –
Zawsze uważałem, że finalizatorzy byli w stanie zutylizować niezarządzane zasoby jako bezpieczne w razie awarii wywołania IDisposable.Dispose() (ktoś zapomniał użyć metody using() lub wreszcie) i nie powoduje żadnych problemów, o ile Twoja Dispose() wywołuje SuppressFinalize –