Ihre Frage, ob Sie immer anrufen sollten oder nicht, Disposeist 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 Disposenicht obligatorisch sind, unglaublich schwach ist. Er gibt zwei Beispiele, um seine Meinung zu rechtfertigen.
Im ersten Beispiel sagt er, dass das Aufrufen Disposevon Windows Forms-Steuerelementen in Mainstream-Szenarien mühsam und unnötig ist. Er erwähnt jedoch nicht, dass DisposeSteuercontainer 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.WaitHandleaggressiv 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 IAsyncResultselbst nicht den von Microsoft veröffentlichten Richtlinien für den Umgang mit IDisposableObjekten entspricht. Wenn eine Klasse einen Verweis auf einen IDisposableTyp enthält, sollte die Klasse selbst implementiert werden IDisposable. Wenn IAsyncResultdiese Regel befolgt wird, kann die eigene DisposeMethode 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.
usingKonstrukt tun .