Ihre Frage, ob Sie immer anrufen sollten oder nicht, Dispose
ist normalerweise eine hitzige Debatte. In diesem Blog finden Sie eine interessante Perspektive von angesehenen Personen in der .NET-Community.
Persönlich denke ich, dass Jeffrey Richters Position, dass Anrufe Dispose
nicht obligatorisch sind, unglaublich schwach ist. Er gibt zwei Beispiele, um seine Meinung zu rechtfertigen.
Im ersten Beispiel sagt er, dass das Aufrufen Dispose
von Windows Forms-Steuerelementen in Mainstream-Szenarien mühsam und unnötig ist. Er erwähnt jedoch nicht, dass Dispose
Steuercontainer in diesen Mainstream-Szenarien tatsächlich automatisch aufgerufen werden.
Im zweiten Beispiel gibt er an, dass ein Entwickler fälschlicherweise annehmen könnte, dass die Instanz von IAsyncResult.WaitHandle
aggressiv entsorgt werden sollte, ohne zu bemerken, dass die Eigenschaft das Wartehandle träge initialisiert, was zu einer unnötigen Leistungseinbuße führt. Das Problem bei diesem Beispiel ist jedoch, dass das IAsyncResult
selbst nicht den von Microsoft veröffentlichten Richtlinien für den Umgang mit IDisposable
Objekten entspricht. Wenn eine Klasse einen Verweis auf einen IDisposable
Typ enthält, sollte die Klasse selbst implementiert werden IDisposable
. Wenn IAsyncResult
diese Regel befolgt wird, kann die eigene Dispose
Methode entscheiden, welches ihrer Mitglieder entsorgt werden muss.
Wenn also nicht jemand ein überzeugenderes Argument hat, werde ich im Lager "Immer anrufen" entsorgen bleiben, mit dem Verständnis, dass es einige Randfälle geben wird, die hauptsächlich aus schlechten Designentscheidungen resultieren.
using
Konstrukt tun .