【问题标题】:Xamarin.IOS memory leaks - monitoring memory consumption?Xamarin.IOS 内存泄漏 - 监控内存消耗?
【发布时间】:2021-12-25 23:13:40
【问题描述】:

我们正在使用 Xamarin.iOS 开发一个应用程序,它正在呈现实时数据。因此,每秒钟或多或少都会从 CLLocationManager() 接收到一个新位置,然后使用 CoreGraphics 和 UIKit 在屏幕上呈现包含复杂且不断变化的信息的地图。

存在内存泄漏,这意味着根据渲染的复杂性,应用程序会在一段时间后发出 MemoryWarning,通常是 10-100 分钟,然后它就会崩溃。 我们不能使用 Xamarin.Profiler,因为我们不能努力 VS Enterprise,而且我们不了解 Xcode Instruments,这在 Xcode 13 中更加不清楚。

因此,我们正在系统地跳过代码块,在模拟位置的真实设备上运行应用程序并等待,直到 MemoryWarnings 开始。

这个方法可行,只是非常耗时。

我现在的问题是:

有没有办法监控 iOS 中的内存消耗/增长?看到它随着每个循环而上升?比如:

Console.WriteLine("Current mem: " + GetCurrentIosMemoryConsumtion());

我希望看到该值在内部增长,然后触发 ReceiveMemoryWarning 事件。

编辑:我再次尝试了 Instruments,但它在 2 分钟后冻结了应用程序。到那时,已分配并再次释放了 7GiB。到目前为止只有 124MiB 持久。

【问题讨论】:

    标签: memory-leaks xamarin.ios


    【解决方案1】:

    我认为学习 Xcode 工具可能会有所帮助。而且 Xcode 总是会显示使用了多少内存。

    打开所有合理的警告。问题通常是一个参考周期,你会收到警告。 (引用循环防止内存被释放)。看看你是否有任何不弱的代表。或者您是否将对象收集到一个从未清理过的数组中。

    【讨论】:

    • 我对 Xcode 工具的问题是,它没有向我显示任何有用的堆栈跟踪。我主要看到的是汇编代码,有时是一些本机 ios 调用,但从来没有在我的 xamarin-c# 代码中指向我的东西。
    • 下一个问题是,连接 Instruments 后,应用程序运行不同,经常快速崩溃或死机。我相信 Instruments 和 Xamarin 并不能很好地协同工作
    • 我现在使用 Xcode-Instruments 13.0 工作了一段时间,正如@gnasher729 推荐的那样,它似乎真的很有用。但它运行的时间不够长。连接到应用程序 1-2 分钟后,应用程序冻结,不再收集数据。如果没有 Instruments,应用程序至少会运行 30 分钟,然后才会触发内存警告。任何想法,如何能够让应用程序在 Instruments 中更长?
    • 尝试此链接中的步骤:stackoverflow.com/questions/32455689/…
    • 感谢@ColeX-MSFT,不幸的是没有运气。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多