【问题标题】:Xamarin iOS Memory ProfilingXamarin iOS 内存分析
【发布时间】:2017-08-10 06:06:06
【问题描述】:

我有一个几乎可以发布的应用程序,我们在 Xamarin.iOS 中编写了代码,虽然它在功能上运行得非常好,但该应用程序在左右和中间都有内存泄漏。对于大多数 Xamarin.iOS 开发人员来说,这无疑是一个常见问题,因为我已经阅读了许多帐户,这些帐户说这个平台上的内存管理并不完全是它看起来的样子。尽管我一直在处理视图,正确地要求 GC 收集并尽可能使用处理方法,但它仍然到处泄漏内存,而没有合乎逻辑或明显的解释。

我遇到过可以支持内存沉积的方法,例如这个 - Xamarin iOS memory leaks everywhere,但我发现很难识别和清楚究竟是什么内存泄漏。

该应用程序非常简单,没有太多图像或文本,几乎是静态的信息页面,具有简单的功能,但它仍然在泄漏。我无法使用 Xamarin Profiler 找出究竟是什么泄漏,因为我没有为此订阅企业版,而且我还发现使用 Instruments 进行分析很麻烦而且不是很有帮助,因为它识别的只是内存泄漏,但不完全是哪些数据正在泄漏,或者以什么方法或代码的一部分泄漏。

我想从社区中了解更多关于其他人使用什么来分析 Xamarin iOS 应用程序以及底线答案 - 垃圾收集是否在 Xamarin 中工作,如果有什么特别的事情我必须做才能让它工作,那会是什么?

谢谢大家。

【问题讨论】:

    标签: c# ios memory-management memory-leaks xamarin.ios


    【解决方案1】:

    如果需要,您可以使用 Apple 的 Instruments 进行分析。我会问你是否取消订阅事件处理程序 - 虽然如果它像你说的那样大,我怀疑单独的事件处理程序可能会导致问题。其他常见的内存泄漏罪魁祸首包括单例和计时器。我还会问是什么让您认为您有内存泄漏 - 也许您只有一个大型应用程序,在这种情况下 Xamarin Linker 或更少的泛型可能会有所帮助。

    【讨论】:

    • 感谢分享这个@kellen。你有一定道理。我知道存在某种内存泄漏,例如当我进入一个屏幕然后退出然后再次进入该屏幕然后退出等等时,Apple 仪器中显示的内存使用量不断攀升。 Plus Instruments 确实说每次都有泄漏。这可能是应用程序大小和内存泄漏的结合。
    • 确保你取消订阅事件,我也有内存泄漏,需要一段时间来修复,在 ViewDidDisappear 我取消订阅所有事件处理程序,例如 UIButtons 上的 TouchUpInside
    猜你喜欢
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多