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.
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.
2 Stimmen
@John Saunders: Ich bitte um Entschuldigung. Ich habe eine Suche durchgeführt, bevor ich meine Frage gepostet habe, und habe keine Frage gefunden, die gestellt wurde und die ich für ein Duplikat hielt - mein Fehler bei der Suche. Ich bin der Logik gefolgt, die ich auf meta.stackoverflow.com gefunden habe: "Es ist oft von Vorteil, mehrere subtile Varianten einer Frage zu haben, da die Leute dazu neigen, mit völlig unterschiedlichen Begriffen zu fragen und zu suchen, und je besser unsere Abdeckung ist, desto größer sind die Chancen, dass unsere Programmierkollegen die Antwort finden, nach der sie suchen."
1 Stimmen
Eine weitere MSDN-Ressource, die in diesem Fall nützlich ist: msdn.microsoft.com/de-us/library/ms182172%28v=vs.80%29.aspx - Die entsprechenden Regeln gelten auch für die Beantwortung der ursprünglichen Frage.
0 Stimmen
Mögliches Duplikat von Was ist der Unterschied zwischen verwalteten und eigenen Ressourcen bei der Entsorgung? (.NET)