【问题标题】:Mono for Android Memory Leaks用于 Android 内存泄漏的 Mono
【发布时间】:2012-05-04 06:18:43
【问题描述】:

我在 Mono for Android 中的垃圾收集器遇到问题,我正在研究它,并说我必须在每个 OnDestroy() 方法中手动放置 GC.Collect() 才能释放我不使用的对象,我也尝试将 Dispose 用于 Java.Lang.Objects,但该应用程序仍在消耗和增加内存。我该如何解决?

【问题讨论】:

标签: c# memory memory-leaks xamarin.android


【解决方案1】:

主要问题:这是一个实际问题吗?垃圾收集器本质上是非确定性的,因此内存使用会有很大差异。这不一定是问题。这只是事情的一部分。如果您经常用完全局引用或耗尽进程堆,那么这是一个问题。如果您只是看到 gref 增加,但在自然发生收集时它们减少,则可能不值得担心。

如果是问题,我们需要详细说明问题所在。例如,Bitmap 实例可以很容易地exhaust memory,而solutions for Bitmaps 不一定适用于一般情况。

要获取更多信息,您可以启用Global Reference Messages 以查看何时创建和销毁全局引用。

此外,我们会不断更新 GC 启发式方法。适用于 Android 4.1.0 的 Mono 引入了一项更改,其中一旦我们达到平台最大 gref 值的 80%(模拟器上为 1800 gref)的 gref 阈值,就会自动调用 GC.Collet()。这应该消除了OnDestroy() 调用GC.Collect() 的大部分需要,尽管(一如既往)GC 可能会在“不合时宜的时刻”启动,因此明确的GC.Collect() 无论如何可能更可取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 2014-08-05
    • 2015-07-20
    • 2013-08-23
    相关资源
    最近更新 更多