仪器消耗大量内存。
根据您录制的内容,您可能会减少其内存使用量。例如,您通常可以指定要记录的内容(或不记录的内容),或降低采样频率(如果适用)。
100MB/s 异常高。您能否更准确地描述您当时正在录制的内容?(您使用的仪器,您记录的过程正在做什么等)。
Xcode 3 使用的内存要少得多——不确定 Instruments 是否也是如此。
您可以通过将工具集作为 32 位进程运行来稍微减少内存使用量。
最后,2GB 物理内存对于 Xcode + Instruments + iOS Sim 来说不算什么。fwiw,我经常用 8 GB 或更多 GB 耗尽物理内存。嘘。幸运的是,当您想要 4 或 8GB 时,内存很便宜。
更新
我尝试使用分配、泄漏和僵尸工具
如果必须,您可以单独运行这些测试。
分配
如果您的应用程序没有创建大量分配,则分配本身不应消耗大量内存。
要使用此仪器减少内存,您可以禁用一些您不感兴趣的选项:
- 不记录每个 ref count 操作
- 只跟踪活动分配
- 禁用僵尸检测
- 不识别 c++ 对象
泄漏
泄漏检测本身会消耗大量内存,因为它会扫描内存,基本上是克隆您的分配。假设您分配了 100MB - 泄漏会定期暂停进程,克隆内存并扫描它的模式。这可能会比您的应用程序消耗更多的内存。iirc,它在仪器中作为子进程执行。
僵尸
僵尸检测通常意味着参考计数记录。在调试僵尸时,永远不要释放它们是最有效的。如果你释放它们,你可能只会检测到短暂的僵尸(不确定仪器中是否有这样的选项......)。从不释放 objc 分配显然会消耗更多内存。在进程上运行泄漏将消耗更多内存,因为您的堆大小会更大 - 不应将泄漏和僵尸组合在一起。
您应该能够通过禁用其中一些选项并单独测试它们来减少总消耗。
笔记
- 最前沿的开发者工具版本可能真的很不稳定。如果您遇到问题,坚持使用官方版本会有所帮助。
- 我可以单独使用分配运行 osx 单元测试(主要是 c/c++ api),记录时消耗大约 1MB/s。似乎有些问题,但也许这表明您的程序中存在问题(许多临时分配?)。
- 更改数据显示方式和/或充电/对焦设置可能需要大量内存。例如,“全部恢复”可能需要几 GB 来处理大样本。
- if 100MB/s is an accurate number, i'd file a bug. I know Instruments consumes a lot of memory, but that's very high for recording an idle app, even with the expectation that instruments consumes a lot of memory.
good luck