相关疑难解决方法(0)

Xamarin iOS内存随处可见

我们在过去的8个月里一直在使用Xamarin iOS,并开发了一个具有许多屏幕,功能和嵌套控件的非平凡企业应用程序.我们已经完成了我们自己的MVVM拱门,跨平台BLL和DAL为"推荐".我们在Android之间共享代码,甚至我们的BLL/DAL也在我们的网络产品上使用.

一切都很好,除了现在在项目的发布阶段,我们在基于Xamarin iOS的应用程序中发现无法修复的内存泄漏.我们已经遵循了所有"指南"来解决这个问题,但实际情况是C#GC和Obj-C ARC似乎是不兼容的垃圾收集机制,它们以当前的方式在monotouch平台中相互叠加.

我们发现现实情况是,原生对象和管理对象之间的硬周期WILL发生,FREQUENTLY对于任何不平凡的应用程序.在您使用lambdas或手势识别器的任何地方都可以轻松实现这一点.加上MVVM的复杂性,这几乎是一种保证.只想念其中一种情况,并且永远不会收集整个对象图.这些图表将引诱其他物体进入并像癌症一样成长,最终导致iOS的迅速和无情的消灭.

Xamarin的答案是对这个问题的不感兴趣的推迟以及"开发者应该避免这些情况"的不切实际的期望.仔细考虑这一点就可以看出这是对垃圾收集在Xamarin中基本被打破的承认.

现在对我的认识是,在传统的c#.NET意义上,你并没有真正在Xamarin iOS中获得"垃圾收集".您需要使用"垃圾维护"模式实际上让GC移动并完成其工作,即使这样,它也永远不会是完美的 - 非决定性的.

我的公司投入了大量资金,试图阻止我们的应用程序崩溃和/或内存不足.我们基本上必须明确地和递归地处理每一件该死的东西,并在应用程序中实施垃圾维护模式,只是为了阻止崩溃并拥有我们可以销售的可行产品.我们的客户是支持和宽容的,但我们知道这不可能永远存在.我们希望Xamarin有一个专门的团队来处理这个问题,并且一劳永逸地得到它.不幸的是,看起来不像.

问题是,我们的经验是用Xamarin编写的非平凡企业级应用程序的例外或规则吗?

UPDATE

请参阅DisposeEx方法和解决方案的答案.

c# garbage-collection xamarin.ios ios xamarin

49
推荐指数
5
解决办法
2万
查看次数

标签 统计

c# ×1

garbage-collection ×1

ios ×1

xamarin ×1

xamarin.ios ×1