好的,这是我的问题,如果它重复,我道歉。我搜索但找不到任何我认为相关的内容。
当我从xcode运行仪器并开始测试我的应用程序是否存在内存泄漏或分配时,我的iMac最终开始非常缓慢地运行。
这导致我在使用乐器时运行活动监视器,我注意到每个第二个乐器都打开它会占用越来越多的实际内存。大约每秒100MB。
它不需要很长时间就可以消耗我所有的iMacs空闲内存(2gbs)然后开始滞后。
无论如何,每次申请都不会发生这种情况。我已经完成了与我下载的一些应用程序/项目相同的测试,仪器似乎只使用了大约250mbs的空间并且没有显着增加。
有什么明显的东西我做错了吗?任何帮助,将不胜感激。
感谢。
答案 0 :(得分:5)
乐器消耗大量内存。
取决于您录制的内容,您可以减少其内存使用量。例如,您通常可以指定要记录的内容(或不记录内容),或者降低采样频率(如果适用)。
100MB / s异常高。你能否更准确地描述你当时录制的内容? (您使用的工具,您记录的流程等)。
Xcode 3使用了更少的内存 - 不确定是否也是仪器的情况。
通过将工具集作为32位进程运行,可以稍微减少内存使用量。
最后,2GB物理内存对Xcode + Instruments + iOS Sim来说无关紧要。 fwiw,我经常用8 GB或更多GB耗尽物理内存。嘘。幸运的是,当你想要4或8GB时,内存很便宜。
<强>更新强>
我尝试使用仪器进行分配,泄漏和僵尸
如果必须,您可以单独运行这些测试。
<强>分配强>
如果您的应用没有创建大量分配,分配本身不应占用大量内存。
要使用本乐器减少记忆,您可以禁用一些您不感兴趣的选项:
<强>泄漏强>
泄漏检测本身会占用大量内存,因为它会扫描内存,基本上会克隆您的分配。假设你有100MB的分配 - 泄漏将定期暂停进程,克隆内存并扫描它的模式。这可能比你的应用消耗更多的内存。 iirc,它作为乐器中的子过程执行。
<强>僵尸强>
僵尸检测通常意味着参考计数记录。调试僵尸时,永远不要释放它们是最有效的。如果你释放它们,你可能只会发现瞬态僵尸(不确定是否有一个选项可用于乐器......)。永远不会释放objc分配显然会消耗更多内存。在进程上运行泄漏将消耗更多内存,因为堆大小会更大 - 不应该组合泄漏和僵尸。
您应该能够通过禁用其中一些选项并逐个测试来减少总消耗。
备注强>