Zitat: |
.NET macht es einem in dem Fall wirklich nicht leicht. |
Dem kann ich insofern zustimmen das richtiges Dispose Handling manchmal schwierig ist. Dispose ist aber die Notlösung die man braucht weil .Net halt auch nur über einem ungemanagten System liegt. Sobald man die .Net Welt verlässt ist man leider oft gezwungen diese Kröte zu schlucken. In der idealen Welt (in der .Net Windows übernommen hätte) wäre Dispose weitestgehend ein Ding von gestern über das man nur noch lachen würde wie doof das war das man das früher häufiger brauchte. Der Finalizer wäre dann auch gleich mit gestorben.
Zitat: |
bloß nicht dort freigeben, es kann dies und jenes passieren, weil der GC launisch ist". |
Ich benutze den Finalizer eigentlich nie. Das typische Dispose Muster sieht zwar vor dort nochmal als letzte Verteidigungslinie Dispose aufzurufen aber das heißt ja das man zuvor was falsch gemacht hat wenn der Call wirklich nötig wird. Und wenn er benötigt wird hat man dann das Problem das der Finalizer irgendwann aufgerufen wird. Ein Dispose soll aber ungemanagte Resourcen absichern, und deren Freigabe soll deterministisch sein. Ich will nicht das ein File Handle, Connection oder eben auch ein UI Handle das Winforms dummerweise braucht irgendwann freigegeben wird. Durch das implementieren von Finalizer kann man eigentlich meist nur mehr falsch machen als richtig. Im Zweifel "don't touch it".