ark*_*tal 2 c# memory memory-leaks xamarin.android
我在Mono for Android中遇到了垃圾收集器的问题,我正在研究它,并说我必须在每个OnDestroy()方法中手动放置GC.Collect()以释放我不使用的对象,我也在尝试使用Dispose for Java.Lang.Objects,但App仍在使用和增加内存.我怎么解决呢?
主要问题:这是一个实际问题吗?垃圾收集器本质上是非确定性的,因此内存使用会有很大差异.这不一定是个问题; 这只是事情的一部分.如果您经常耗尽全局引用或耗尽进程堆,那么这是一个问题.如果您只是看到grefs增加但是当收集自然发生时它们会减少,那么可能不值得担心.
如果这是一个问题,我们需要具体问题是什么.例如,Bitmap实例很容易耗尽内存,而Bitmaps的解决方案并不一定适用于所有内容.
要获取更多信息,可以启用全局引用消息以查看何时创建和销毁全局引用.
此外,我们不断更新GC启发式算法.Mono for Android 4.1.0引入了一个更改,GC.Collet()一旦我们达到平台最大gref值的80%的gref阈值(模拟器上的1800 grefs),就会自动调用.这应该消除了OnDestroy()调用的大部分需求GC.Collect(),尽管(一如既往)GC可能会在"不合时宜的时刻"开始,所以GC.Collect()无论如何,明确可能更可取.