【问题标题】:MonoTouch: Is less memory allowed on ipad 3 than ipad 2 per process?MonoTouch:每个进程在 ipad 3 上允许的内存是否比 ipad 2 少?
【发布时间】:2012-06-01 18:02:49
【问题描述】:

我有一个在 ipad 2 上运行良好的应用程序,在 ipad 3 上它崩溃了,显然是因为内存不足错误。他们是否有可能减少单个应用程序的使用量?如果是这样,是否有一种使用单点触控的好方法可以在设备上进行跟踪,以便我可以最好地调整需要的内容?

【问题讨论】:

  • 您在应用程序中呈现的每个标签都需要以 CALayer 的形式创建一些后备存储,它将数据保存到图像的 RGB 缓冲区。有可能你的内存太多了。
  • mig:这很好,但我担心的是为什么 ipad2 可以完美运行,而 ipad3 却没有更多资源。如下所示,可能是由于我现在多次阅读的视网膜显示器需要 4 倍的内存来处理一件事情?我有大约 15 个视图在开始时加载到内存中,其中 5 个有我在搜索时手动构建的数据网格,所以我可以很容易地看到这是如何记忆的。虽然我从来没有想过当 3 有更多资源时它会崩溃 ipad 3 而不是 2。这已被证明是仅显示问题导致创建视图原因
  • 没问题,但是如果我将它们添加到我的可见子视图中,那就是它崩溃的时候。我什至将其分解为特定项目,然后我将标签从 255 像素宽变为 120 像素宽并修复了它。这肯定是一个内存问题,但我只是不明白 ipad 3 如何处理的比 ipad 2 少,两者都没有加载其他应用程序。

标签: ipad memory xamarin.ios


【解决方案1】:

我的猜测是,由于屏幕分辨率发生了变化,在渲染到屏幕或使用图像时,您需要 4 倍的位数。

基本上有两种工具可以追踪内存问题:

  • 仪器。这是一个 Apple 工具/分析器,它可以做很多事情,其中​​可以做内存分析。您可以从 Xcode 中打开它(菜单 Xcode -> Open Developer Tool -> Instruments)。
  • HeapShot。这是 MonoTouch 的内存分析器 - 您可以在 MonoDevelop 中访问它(菜单项目 -> 配置文件 - Mono)。如果问题是图像数据,它不会直接显示在此工具中,因为它只跟踪托管对象(并且图像数据存储在相应的本机对等体中,因此 HeapShot 分析器看不到它。但是您可以看到您正在使用的图片数量以及是否泄露了任何图片)。

【讨论】:

  • 我知道仪器,只是不确定它是否适用于 monoTouch。不过我会试试的。我所有的崩溃似乎都在渲染我的视图,并且只有当我将一个项目添加到子视图时。在内存中创建它没有效果,所以这 4 倍可能是原因。我很感激!
  • 我的问题也不是图像,当我渲染一堆标签来填充网格时,就会发生这种情况。
  • 原来是这个问题。我在开始时将所有子视图添加到我的主视图中,因此即使不可见,它们也都在渲染。更改了它,因此它们仅在需要时才出现在主视图中,并且已修复!再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 2011-03-29
  • 1970-01-01
  • 2011-05-30
相关资源
最近更新 更多