虽然根据第"Performance"读取Xamarin文档,我注意到的以下章节:Xamarin垃圾收集和循环引用
下图说明可与强引用会出现一个问题:
对象A对对象B有强烈的引用,而对象B对对象A有强烈的引用。这种对象被称为不朽对象由于存在cir强烈的参考。这种父子关系并不罕见,因此即使对象不再被应用程序使用,垃圾收集器也无法收回对象。
这是我第一次听说C#/ .NET/Mono上下文中的“不朽的对象”。
页面随后继续建议在其中一个对象中使用WeakReference
,这将删除强循环引用并修复此“问题”。
Xamarin.Android使用Mono的Simple Generational garbage collector:上garbage collection声称
与此同时,Xamarin文档。这是一个标记和扫描垃圾回收器[...]
是否标记和扫描GC不受循环引用的影响?
谢谢。我也注意到可以在iOS上启用SGen(在选项中有一个复选框),但它被标记为“实验性”。在实践中,有没有人有过使用iOS上的SGen的经验,并且是否解决了这个问题? – Lou
有一个[新的参考计数系统](https://developer.xamarin.com/guides/ios/advanced_topics/newrefcount/),如果我理解正确,它的目的是解决相反的问题(对象收集太积极)。有趣的是,它与SGen/Boehm不同。我想这意味着即使使用SGen,iOS对象也被引用计数,并且应避免循环引用。 – bwt