C# Android内存泄漏的Mono解决方案

C# Android内存泄漏的Mono解决方案,c#,memory,memory-leaks,xamarin.android,C#,Memory,Memory Leaks,Xamarin.android,我在Mono for Android中遇到垃圾收集器的问题,我正在研究它,并说我必须在每个OnDestroy()方法中手动放置GC.Collect(),以释放我不使用的对象,我也尝试使用Dispose for Java.Lang.objects,但应用程序仍在消耗和增加内存。我怎样才能解决它呢?首要问题:这是一个实际问题吗?垃圾收集器本质上是不确定的,所以内存使用会有很大的不同。这不一定是个问题;这只是事情的一部分。如果您经常耗尽全局引用或耗尽进程堆,那么这就是一个问题。如果你只是看到gref增

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

首要问题:这是一个实际问题吗?垃圾收集器本质上是不确定的,所以内存使用会有很大的不同。这不一定是个问题;这只是事情的一部分。如果您经常耗尽全局引用或耗尽进程堆,那么这就是一个问题。如果你只是看到gref增加了,但是当一个集合自然出现时,gref却减少了,那么这可能就不值得担心了

如果这是一个问题,我们需要关于问题是什么的细节。例如,实例可以很容易地实现,并且不一定适用于一般情况下的所有内容

要获取更多信息,可以启用查看全局引用的创建和销毁时间


此外,我们还不断更新GC启发法。Android 4.1.0版的Mono引入了一个变化,即当我们达到平台最大gref值的80%(模拟器上为1800 gref)时,
GC.Collet()
将自动调用。这应该可以消除调用
GC.Collect()
调用
GC.Collect()
的大部分需要,尽管(一如既往)GC可能在“不合适的时刻”启动,因此显式的
GC.Collect()
可能更可取。

你能提供更多关于你的研究的信息吗?我可以提供一些链接,我指的是同样的问题