MonoTouch:处理ReceiveMemoryWarning的正确方法

时间:2011-04-11 15:04:14

标签: xamarin.ios

我有一个MonoTouch应用程序在野外有时会死于mprotect errno 12 (out of memory),并且它似乎总是事先得到至少一个 ReceiveMemoryWarning 通知。

我想知道回应这个问题的正确方法是什么。我的应用程序可以释放两种类型的东西:OpenGL纹理和托管内存。

我对此的疑问是:

  1. OpenGL纹理:删除OpenGL纹理会有帮助吗?

  2. 托管内存:我无法直接释放它,但我可以将其引用为null。这够了吗?

  3. GC.Collect:我应该在处理程序的末尾调用GC.Collect()吗? GC.Collect会立即执行任何操作,还是为将来安排收集?

  4. 我可以/应该做些什么来回应这个?

1 个答案:

答案 0 :(得分:1)

我在使用OpenGL的应用程序中遇到了一段时间。对我来说,这确实是内存泄漏。

[的DllImport( “/系统/库/框架/ CoreGraphics.framework / CoreGraphics中”)] public static extern void CGDataProviderRelease(IntPtr provider);

和你打电话后 GL.TexImage2D .....

你需要调用CGDataProviderRelease(data.Handle);

现在要说,你可能想看看这个:

http://forums.monotouch.net/yaf_postst1541.aspx