【发布时间】:2011-04-11 15:04:14
【问题描述】:
我有一个 MonoTouch 应用程序,它有时会因 mprotect errno 12 (out of memory) 而死,而且它似乎总是事先至少收到一个 ReceiveMemoryWarning 通知。
我想知道如何正确回应这个问题。我的应用可以释放两种类型的东西:OpenGL 纹理和托管内存。
我的问题是:
OpenGL 纹理:删除 OpenGL 纹理会有帮助吗?
托管内存:我无法直接释放它,但我可以获得对它的空引用。够了吗?
GC.Collect:我应该在处理程序结束时调用 GC.Collect() 吗? GC.Collect 是立即执行任何操作,还是为将来安排收集?
对此我还能/应该做些什么?
【问题讨论】:
-
确定不泄露吗?
-
据我所知,它没有泄漏。我正在跟踪所有 OpenGL 纹理分配和声音数据(管理——我们有自己的混音器),这是我们使用的最大内存位。我已经大大减少了这些东西使用的内存量(我们徘徊在 7MB 纹理内存和 2MB 声音数据左右),但有时由于内存不足,它仍然会死机,尤其是在使用 .NET WebRequest API、iOS 图像之后选择器,或者 MFMailComposer 的东西。
-
确保释放在 WebRequest 中使用的对象,因为它们可以在内存中保留大缓冲区的时间超过您需要的时间(即,在 GC 有机会运行之前)
标签: xamarin.ios