Ich verwende derzeit eine Bibliothek von SWIG in .NET. Die Dokumentation für diese Bibliothek scheint keine Informationen darüber zu enthalten, ob oder welche der erstellten Klassen entsorgt werden müssen. Ich habe auch Diskussionen in anderen Foren darüber gesehen, dass ich Code hinzufügen muss, um untergeordnete Elemente zu entfernen, die ich in der Quelle für diese Bibliothek nicht sehe. Obendrein enthalten die Beispielprojekte und Tests für die Bibliothek keine using
s, und die Objekte, die sie erstellen, sind auch nicht verfügbar.Muss ich SWIG-generierte Objekte entsorgen?
Also, muss ich das "durchschnittliche" SWIG-Objekt entsorgen? Es scheint, dass sie alle Standard-Destruktoren haben, die das Objekt im zugrundeliegenden C++ löschen. Wenn das der Fall ist, kann ich sie einfach wie jedes andere Objekt behandeln und vom Garbage Collector behandeln lassen (abgesehen von Dingen, die verhindern würden, dass der Garbage Collector sie richtig behandelt, wie zirkuläre Referenzen und andere klassische Speicherlecks). Es wäre scheiße, alle Aufrufe/Objekte mit irgendeiner Art von Entsorgungskontext oder etwas in diese Bibliothek einzubinden.
Kreisreferenzen verhindern nicht, dass Objekte entsorgt werden. – Servy
Hat SWIG dem C# -Objekt Finalizer hinzugefügt? Wenn nicht, haben Sie wahrscheinlich einen Speicherverlust, da der GC nicht garantiert, dass Dispose in allen Fällen aufgerufen wird. –
Es hängt davon ab, wie SWIG zum Erstellen des Wrappers verwendet wurde. Es gibt viele Möglichkeiten zum Einwickeln von Objekten, die Sie manuell entsorgen müssen.Zur gleichen Zeit, wie @JoelLucsy erklärt, kann der Wrapper so erstellt werden, dass der generierte Code Finalizer enthält, was eine korrekte GC gewährleistet. –