BoMbY hat folgendes geschrieben: |
Ähh, Euch ist aber schon klar, dass es auch in C# Destruktoren gibt, ja? |
Nope, gibt's nicht.
Was du da hast ist ein Finalizer. Die sehen aus wie Destruktoren in C++, sind aber keine.
Finalizer sind eine wichtige Zutat wenn man schneckenlahmen Code generieren will.[1]
Was ich oben zum CriticalFinalizerObject schrieb war eine Lösung um sicherzustellen, dass der Finalizer auch wirklich aufgerufen wird.
Ein sauberes Verwenden von IDisposable ist da definitiv die nettere, weil finalizerfreie und deterministische, Lösung.
[1]Der GC sweep und die eigentliche Collection laufen in einem extra Thread ab.
Deshalb friert deine App auch nicht dann und wann wie in VB/Java kurz ein.
Verwendest du Finalizer müssen die Threads synchronisiert werden das dauert a) um ein Vielfaches länger und b) friert es dir die GUI ein.
Finalizer können eine nette Sache sein. Man muss nur genau wissen wann es wirklich keine bessere Lösung gibt.
Selbst nach mehreren Jahren .Net Dev habe ich nicht einmal Finalizer benutzen müssen.