我有一个MonoTouch应用程序在野外有时会死于mprotect errno 12
(out of memory),它似乎总是事先得到至少一个ReceiveMemoryWarning通知.
我想知道回应这个问题的正确方法是什么.我的应用程序可以释放两种类型的东西:OpenGL纹理和托管内存.
我对此的疑问是:
> OpenGL纹理:删除OpenGL纹理会有帮助吗?
>托管内存:我不能直接释放它,但我可以将它引用为null.够了吗?
> GC.Collect:我应该在处理程序的末尾调用GC.Collect()吗? GC.Collect会立即执行任何操作,还是为将来安排集合?
>我可以/应该做些什么来回应这个?
解决方法
我在使用OpenGL的应用程序中遇到了一段时间.对我来说,这确实是内存泄漏.
[的DllImport( “/系统/图书馆/框架/ CoreGraphics.framework / CoreGraphics中”)]
public static extern void CGDataProviderRelease(IntPtr provider);
和你打电话后
GL.TexImage2D …..
你需要调用CGDataProviderRelease(data.Handle);
既然如此,你可能想看看这个: