仪器占用了很多内存。
根据你所记录的内容,你可以减少它的内存使用。例如,你可以经常指定记录什么(或不记录什么),或者降低采样频率(如果适用)。
100MB/s是异常高的。你能详细描述一下你在这段时间里正在记录的内容吗?(你使用的仪器,你记录的过程在做什么等等)。
Xcode 3使用的内存少得多-不确定Instruments是否也是如此。
通过将工具集作为32位进程运行,可以在一定程度上减少内存使用。
最后,2GB的物理内存对于Xcode + Instruments + iOS Sim来说微不足道。值得一提的是,我经常用8GB或更多的内存耗尽物理内存。幸运的是,当你想要4GB或8GB时,内存很便宜。
更新
我尝试使用Allocations、Leaks和Zombies的仪器
如果必须的话,你可以单独运行这些测试。
Allocations
如果你的应用程序没有创建大量的分配,那么单独使用allocations不应该消耗太多内存。
为了减少使用这个工具的内存,你可以禁用一些你不感兴趣的选项:
- 不要记录每个ref count操作
- 只跟踪活动分配
- 禁用Zombie检测
- 不要标识C++对象
Leaks
- 仅在需要泄漏历史记录时才会涉及Allocations工具。
泄漏检测本身可能会消耗大量内存,因为它会扫描内存,基本上是克隆你的分配。假设你分配了100MB - 泄漏将定期暂停进程,克隆内存并扫描它以查找模式。这可能比你的应用程序消耗更多的内存。我记得,它是作为Instruments的子进程执行的。
Zombies
僵尸检测通常意味着参考计数记录。当调试僵尸时,最有效的方法是永远不释放它们。如果你释放它们,你只能检测到短暂的僵尸(不确定Instruments中是否有这样的选项...)。永远不释放objc分配显然会消耗更多内存。然后在进程上运行leaks将会消耗更多的内存,因为你的堆大小将变得更大-泄漏和僵尸不应该组合使用。
通过禁用其中一些选项并单独测试它们,你应该能够减少总体消耗。
注:
- 最新的开发者工具可能会非常不稳定。如果您遇到问题,最好使用官方发布版本。
- 我可以仅使用分配运行osx单元测试(主要是c/c++ api),录制时每秒消耗约1MB。这似乎有些异常,但可能表明您的程序存在问题(许多瞬态分配?)。
- 更改数据显示方式和/或电荷/焦点设置可能需要大量内存。例如,“恢复全部”可能需要几GB才能处理大样本。
- 如果100 MB/s是准确的数字,那么我会提交一个错误报告。我知道Instruments消耗了很多内存,但即使考虑到Instruments消耗很多内存的情况下,记录空闲应用程序的负载也非常高。
祝你好运