【问题标题】:Memory issue in mono touch application单点触控应用程序中的内存问题
【发布时间】:2013-07-31 10:29:41
【问题描述】:

我们有一个单点触控应用程序,其中包含大量 UIImageUIView 对象。当我们在 iPad (Version1) 上安装应用程序 (IPA) 文件然后开始工作时,如果我们继续连续工作 10 到 20 分钟,那么它由于内存不足而崩溃。

我们还尝试使用 Intruments 配置文件来跟踪堆分配,但它 每个屏幕导航的显示内存不断增加。我们 在 viewDidDisappear 中处理所有分配的对象,即使 内存没有减少。我们也尝试手动强制垃圾 收集器通过GC.Collect()收集垃圾,但它也没有 工作。

这是单声道触控的错误吗?还是我们错过了内存管理技术?

请帮我解决内存不足警告问题..

谢谢

【问题讨论】:

  • 1.你在用ARC吗? 2.您是否将图像存储在您的应用程序包中以从网络服务器获取它们? 3. 你是如何维护视图层次结构的?
  • 我不知道您的问题的具体情况,但本文介绍了内存最佳实践。 docs.xamarin.com/guides/cross-platform/application_fundamentals/…。有些可能只适用于 xamarin 的 gc,但至少有一半是相当普遍的。

标签: c# ios xamarin.ios monodevelop


【解决方案1】:

在使用UIImageUIImageView 时,您应该将您的代码包装到using 语句中,或者如果您不再需要它们,请手动处理它们。原因是 UIImage 的托管版本基本上只包含 4 个字节,一个指向保存图像数据的内存区域的指针。 图像本身不受管理。这意味着 GC 没有压力,因为它只看到托管世界。 如果您因为需要将所有图像数据保存在内存中而无法做到这一点,那么您需要重新考虑您的设计。 iOS 设备只有非常有限的 RAM,仅仅因为您可以将 .NET 的全部功能应用到设备上,并不意味着您也应该这样做。努力成为一个好的记忆公民。

using(UIImage image = UIImage.FromFile(...))
{
  // Process the image.
}

// Here, the image data will be freed.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多