Xcode Instruments使用大量内存。

时间:2011-08-30 01:58:47

标签: xcode ios-simulator instruments activity-monitor

好的,这是我的问题,如果它重复,我道歉。我搜索但找不到任何我认为相关的内容。

当我从xcode运行仪器并开始测试我的应用程序是否存在内存泄漏或分配时,我的iMac最终开始非常缓慢地运行。

这导致我在使用乐器时运行活动监视器,我注意到每个第二个乐器都打开它会占用越来越多的实际内存。大约每秒100MB。

它不需要很长时间就可以消耗我所有的iMacs空闲内存(2gbs)然后开始滞后。

无论如何,每次申请都不会发生这种情况。我已经完成了与我下载的一些应用程序/项目相同的测试,仪器似乎只使用了大约250mbs的空间并且没有显着增加。

有什么明显的东西我做错了吗?任何帮助,将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:5)

乐器消耗大量内存。

取决于您录制的内容,您可以减少其内存使用量。例如,您通常可以指定要记录的内容(或不记录内容),或者降低采样频率(如果适用)。

100MB / s异常高。你能否更准确地描述你当时录制的内容? (您使用的工具,您记录的流程等)。

Xcode 3使用了更少的内存 - 不确定是否也是仪器的情况。

通过将工具集作为32位进程运行,可以稍微减少内存使用量。

最后,2GB物理内存对Xcode + Instruments + iOS Sim来说无关紧要。 fwiw,我经常用8 GB或更多GB耗尽物理内存。嘘。幸运的是,当你想要4或8GB时,内存很便宜。

<强>更新

  

我尝试使用仪器进行分配,泄漏和僵尸

如果必须,您可以单独运行这些测试。

<强>分配

如果您的应用没有创建大量分配,分配本身不应占用大量内存。

要使用本乐器减少记忆,您可以禁用一些您不感兴趣的选项:

  • 不记录每个引用计数操作
  • 仅跟踪活动分配
  • 禁用僵尸检测
  • 不识别c ++对象

<强>泄漏

  • 仅在您需要泄漏历史时暗示分配工具

泄漏检测本身会占用大量内存,因为它会扫描内存,基本上会克隆您的分配。假设你有100MB的分配 - 泄漏将定期暂停进程,克隆内存并扫描它的模式。这可能比你的应用消耗更多的内存。 iirc,它作为乐器中的子过程执行。

<强>僵尸

  • 暗示分配工具。

僵尸检测通常意味着参考计数记录。调试僵尸时,永远不要释放它们是最有效的。如果你释放它们,你可能只会发现瞬态僵尸(不确定是否有一个选项可用于乐器......)。永远不会释放objc分配显然会消耗更多内存。在进程上运行泄漏将消耗更多内存,因为堆大小会更大 - 不应该组合泄漏和僵尸。

您应该能够通过禁用其中一些选项并逐个测试来减少总消耗。

备注

  • 最新的开发者工具版本可能非常不稳定。如果您遇到问题,可以坚持正式发布。
  • 我可以单独使用分配来运行osx单元测试(主要是c / c ++ apis),录制时它会消耗大约1MB / s。看似错误的东西,但也许这表明你的程序存在问题(很多瞬态分配?)。
  • 更改数据的显示方式和/或充电/对焦设置可能需要大量内存。例如“全部还原”可能需要几GB才能处理大样本。
  • 如果100MB / s是准确数字,我会提交错误。我知道乐器消耗了大量的内存,但是对于录制空闲的应用程序来说这是非常高的,即使期望乐器消耗大量内存。
祝你好运