5 Stimmen

Allgemeine Regel, wann IDisposable zu implementieren ist

EDIT : Diese Frage ist ein Duplikat von Was ist der Unterschied zwischen verwalteten und eigenen Ressourcen bei der Entsorgung? (.NET) und viele andere. Bitte antworten Sie den anderen, wenn Sie etwas hinzuzufügen haben.


Nach Angaben der Rahmengestaltungsrichtlinien von Krzysztof Cwalina und Brad Abrams, sollte ein Typ, der Instanzen von Einwegtypen enthält, IDisposable implementieren.

Gibt es eine andere allgemeine Faustregel dafür, wann es am besten ist, IDisposable zu implementieren?

1 Stimmen

Dies ist eine mehrfache, mega-duplizierende. Bitte suchen Sie zuerst ein paar Minuten lang in SO.

1 Stimmen

Ich stimme nicht zu, dass dies ein Duplikat von "Was ist der Unterschied " ist, weil die vorherige Frage nicht wirklich auf Best Practice oder mit Feldern sprechen, die IDisposable implementieren.

0 Stimmen

Ich bin mir sicher, dass es sich um ein Duplikat handelt, aber ich glaube nicht, dass es ein exaktes Duplikat der oben verlinkten Frage ist.

1voto

Pixar21 Punkte 69

IDisposable ist eine der wichtigsten Waffen eines Programmierers gegen .Net-Speicherlecks. Während die Dokumentation vorschlägt, dass es für externe Ressourcen verwendet werden sollte, mache ich ausgiebigen Gebrauch von IDisposable, um intern Ressourcen wie z. B. Zeiger auf übergeordnete Klassen.

Es ist recht einfach, die Anforderung zu demonstrieren, indem man zwei gegenseitig referenzierende Klassen erstellt, nämlich foo und bar. foo verweist auf bar und umgekehrt. Wenn foo aus dem Gültigkeitsbereich fällt, sieht der GC, dass bar immer noch auf ihn verweist, so dass er nicht gesammelt wird (und umgekehrt). Der Speicher wird nicht abgeholt.

Dies ist das gleiche Problem wie bei EventHandlern, bei denen die Referenz nicht freigegeben wird, wenn das Formular geschlossen wird, es sei denn, sie wird explizit freigegeben oder das WeakEvent-Modell wird implementiert.

Ich würde vorschlagen, dass die beste Vorgehensweise darin besteht, ein C++-Programmiermodell anzunehmen, bei dem man hinter sich selbst aufräumt, indem man Dispose es sei denn, Sie sind davon überzeugt, dass der GC die Sache für Sie regeln kann.

0voto

Wenn die Klasse für die Lebensdauer eines IDisposable -Objekt, dann sollte es die IDisposable Schnittstelle und entsorgen Sie sie (oder verwenden Sie die using Anweisung). Das liegt daran, dass Container für die Injektion von Abhängigkeiten sehr unzufrieden mit Ihnen sein werden, wenn Sie anfangen, die von ihnen erstellten Singletons zu entsorgen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X