【问题标题】:Memory warning and crashing app - can't find source of issue内存警告和崩溃的应用程序 - 找不到问题的根源
【发布时间】:2012-10-03 23:06:20
【问题描述】:

收到许多内存警告后,我的应用程序不断崩溃。它有将近三万行代码,因此很难跟踪问题。我已经通过仪器运行它,并且在某些阶段有高达 30MB 的实时字节,据我所知,这应该不是太大的问题。内存泄漏极少,因此它们不会成为问题。该应用程序在长时间播放后往往会崩溃。仪器中没有任何东西可以帮助我追踪我不断收到的记忆警告的来源。有没有其他可能的方法来做到这一点?非常重要的是,这不会因为明显的原因而发生。非常感谢任何帮助。

【问题讨论】:

  • 使用虚拟机跟踪工具查看与您的应用相关的脏内存量。几乎可以肯定泄漏看起来非常小,因为您的应用程序内存空间中的跟踪结构很小,但它们与另一个内存空间中的媒体对象相关联(例如,由渲染服务器中的大型渲染缓冲区支持的图片,音频/视频mediaserverd 和启动板等中的缓冲区支持的文件)。 VM Tracker 工具将向您展示应用程序内存使用情况的真实情况。那些“微小”的泄漏可能根本就不小。
  • 您是否尝试过分析构建产品 -> 分析?肯定会显示一些内存泄漏的行...
  • @JasonCoco 显然 76% 的常驻内存是脏的。我对 VM Tracker 不是很熟悉,但我认为这意味着我有很多泄漏和未使用的内存。下一步将是弄清楚究竟是什么 id 导致了这种情况,这就是我现在卡住的地方。
  • @Keithbunts 分析没有发现任何重大问题

标签: iphone objective-c memory instruments memory-warning


【解决方案1】:

实际上,根据我的经验,30MB 的活动字节并不是那么少的内存。 IMO,可以消耗大量内存,但只消耗很短的时间,然后回到更安全的内存占用水平(如果你想解决 iPad1 应该在 10 到 15/20 MB 之间)。

我认为“废弃内存”就是这种情况,即分配的内存,虽然可以释放,但永远不会(或太迟)。

查看this post 以了解快照内存分析,这可能对您的情况有所帮助。

当然,您的应用确实也有可能需要这么多内存(例如,因为它处理的一些大型资源),在这种情况下,前进的道路将试图减少所需的内存(这在很大程度上取决于您的应用管理的数据类型。如果是游戏,例如,您可以为您的作品使用 RGB565 格式而不是 RGBA8888)。

此外,如果 Instruments 允许您确定一定数量的内存消耗增加的情况,您可以处理这些情况以消除所有泄漏,或删除废弃的内存,或优化您的应用程序内存消耗要求。

【讨论】:

  • 非常感谢,这对我帮助很大。似乎我有很多未使用的内存,现在我唯一的问题是我不知道究竟是什么导致了这种情况发生。我将首先尝试通过更改艺术品等来减少内存消耗,然后在需要时使用工具来跟踪确切的问题。
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
相关资源
最近更新 更多