Xamarin.ios MonoTouch:处理接收记忆警告的正确方法

Xamarin.ios MonoTouch:处理接收记忆警告的正确方法,xamarin.ios,Xamarin.ios,我在野外有一款MonoTouch应用程序,它有时会因mprotect errno 12而死亡,而且它似乎总是至少提前收到一个通知 我想知道正确的应对方式是什么。我的应用程序可以释放两种类型的东西:OpenGL纹理和托管内存 我的问题是: OpenGL纹理:删除OpenGL纹理会有帮助吗 托管内存:我不能直接释放它,但我可以获取对它的空引用。够了吗 GC.Collect:我应该在处理程序末尾调用GC.Collect()?GC.Collect是否立即执行任何操作,或者是否为将来安排收集 对此,我还能

我在野外有一款MonoTouch应用程序,它有时会因mprotect errno 12而死亡,而且它似乎总是至少提前收到一个通知

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

我的问题是:

  • OpenGL纹理:删除OpenGL纹理会有帮助吗

  • 托管内存:我不能直接释放它,但我可以获取对它的空引用。够了吗

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

  • 对此,我还能/应该做些什么


  • 不久前,我在使用OpenGL的应用程序中遇到了这个问题。对我来说,这真的是一次内存泄漏

    [DllImport(“/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics”)] 公共静态外部无效CGDataProviderRelease(IntPtr提供程序)

    你打电话之后呢 德国劳埃德船级社Texamage2D

    您需要调用CGDataProviderRelease(data.Handle)

    话虽如此,您可能想看看:


    它肯定没有泄漏吗?据我所知,它没有泄漏。我正在跟踪所有OpenGL纹理分配和声音数据(管理——我们有自己的混音器),它们是我们使用的最大内存位。我已经大大减少了这些东西所使用的内存量(我们在7MB的纹理内存和2MB的声音数据之间徘徊),但它有时仍然会因为内存不足而死掉,特别是在使用.NET WebRequest API、iOS图像选择器或MFMailComposer之类的东西之后。请确保您处理了在WebRequest中使用的对象,因为它们可以在内存中保留大缓冲区的时间超过您需要的时间(即,在GC有机会运行之前),谢谢Danny。在您的情况下,内存泄漏是否在仪器中出现(或者您是否看到内存使用量增加)?我没有在我的代码中使用CGDataProvider(至少是直接使用),我也没有看到我的应用程序在死亡之前在仪器中的内存增加。我花了一些时间来分离这种情况,并在一个案例中总结了结果。