При чтении Xamarin документов в разделе "Performance", я заметил следующую главу:Xamarin сборщика мусора и циклические ссылки
Следующая диаграмма иллюстрирует проблему, которая может возникнуть при сильных ссылках:
Объект A имеет сильную ссылку на объект B, а объект B имеет сильную ссылку на объект A. Такие объекты известны как бессмертные объекты из-за присутствия cir сильные ссылки. Это отношение родитель-ребенок не является необычным, и в результате ни один объект не может быть восстановлен сборщиком мусора, даже если объекты больше не используются приложением.
Это первый раз, когда я слышал об «бессмертных объектах» в контексте C# /. NET/Mono.
Затем страница продолжает предлагать использовать WeakReference
в одном из объектов, который удалит сильную круговую ссылку и устранит эту проблему.
В то же время, Xamarin документы по garbage collection утверждают, что:
Xamarin.Android использует Моно Simple Generational garbage collector. Это сборщик мусора маркировки и разметки [...]
Не являются ли маркеры и развертки GC незатронутыми циркулярными ссылками?
Спасибо. Я также заметил, что можно включить SGen в iOS (есть флажок где-то в настройках), но он отмечен как «экспериментальный». Имел ли кто-нибудь опыт работы с SGen на iOS на практике и исправляет ли он эту проблему? – Lou
Существует [Новая система подсчета ссылок] (https://developer.xamarin.com/guides/ios/advanced_topics/newrefcount/). Если я правильно понимаю, она направлена на решение противоположной задачи (объект слишком агрессивно). Интересно, что это другой вариант, чем SGen/Boehm. Я предполагаю, что это означает, что даже с SGen объект iOS подсчитывается по ссылке, и следует избегать циклических ссылок. – bwt