Während Xamarin docs unter Abschnitt "Performance" lesen, habe ich folgendes Kapitel bemerkt:Xamarin Garbage Collector und zirkuläre Referenzen
Das folgende Diagramm zeigt ein Problem, das mit starken Referenzen auftreten:
Objekt A hat eine starke Referenz auf Objekt B und Objekt B hat eine starke Referenz auf Objekt A. Solche Objekte sind als unsterbliche Objekte aufgrund der Anwesenheit der cir bekannt cular starke Referenzen. Diese Parent-Child-Beziehung ist nicht ungewöhnlich und daher kann keines der Objekte vom Garbage Collector zurückgewonnen werden, auch wenn die Objekte nicht mehr von der Anwendung verwendet werden.
Das ist das erste Mal, dass ich von "unsterblichen Objekten" im C# /. NET/Mono Kontext gehört habe.
Die Seite fährt dann mit einem Vorschlag fort, ein WeakReference
in einem der Objekte zu verwenden, das den starken Zirkelverweis entfernen und dieses "Problem" beheben wird.
Zur gleichen Zeit Xamarin docs auf garbage collection Behauptung, dass:
Xamarin.Android Monos verwendet Simple Generational garbage collector. Dies ist ein Mark-and-Sweep-Speicherbereiniger [...]
Werden Markierungs- und Sweep-GCs nicht durch zirkulare Referenzen beeinflusst?
Danke. Ich habe auch bemerkt, dass es möglich ist, SGen auf iOS zu aktivieren (es gibt ein Kontrollkästchen irgendwo in Optionen), aber es ist als "experimentell" markiert. Hat jemand Erfahrung mit SGen auf iOS in der Praxis, und behebt es dieses Problem? – Lou
Es gibt ein [New Reference Counting System] (https://developer.xamarin.com/guides/ios/advanced_topics/newrefcount/), wenn ich es richtig verstehe, zielt es darauf ab, das gegenteilige Problem zu lösen (Objekt zu aggressiv gesammelt). Interessanterweise ist es eine andere Option als SGen/Boehm. Ich denke, es bedeutet, dass sogar mit SGen, iOS-Objekt Referenz gezählt werden, und zirkuläre Referenzen sollten vermieden werden. – bwt