Xcode内存图-显示内存使用增加-它到底显示了什么?

4
当我在xcode 6(可能也是5)中观察调试图表时,运行我的应用程序时,随着我在屏幕上放置更多某个对象并动画移动它,内存使用量继续上升。当我将其移除时,似乎不会减少。一旦被移除,我相信它们没有任何引用。
请参见截图:http://i.stack.imgur.com/SnhbK.png 然而,当我使用Instruments来尝试确定发生了什么时,只有大约12mb持续存在,并且Total Bytes继续上升,正如预期的那样。
请参见截图:http://i.stack.imgur.com/VBwce.png 这是正常行为吗?Xcode中的图表到底显示了什么?我有什么遗漏的地方吗?
在Instruments中,我将Allocation Lifespan设置为All Allocations,Allocation Type设置为All Heap和Anonymous VM,如上所示。
更新:
通过在 Activity Monitor 中运行 Instruments,我能够看到“实际内存”以与 Xcode 显示的速率相同的速度增加。@Mark Szymczyk 指出 Allocations 工具中不显示 OpenGL ES 纹理内存分配。
通过在 Cocos2D 3.1 中定期使用以下命令清除纹理缓存,内存使用量始终降至约18mb,并随着添加更多精灵而再次增加。
[[CCDirector sharedDirector] purgeCachedData];

感谢Mark Szymczyk指引我朝这个方向 - 谢谢!


嗨 JoGoFo,你在项目中启用了 Zombie 功能吗? - Yogendra
同学,我想提醒你,Zombie已经关闭了。还有其他的想法吗? - JoGoFo
你好,你的项目中使用了大量的图片吗? - iamVishal16
不是很多图片,不到10张。我更想知道我是否正确地看待了这个问题,或者是否有什么我忽略的地方。 - JoGoFo
1个回答

4

从您的截图来看,Xcode图表可能显示的是Instruments截图中“总字节”列的等效值。当您删除一个对象时,持久字节将减少,但总字节不会减少。这就解释了为什么Xcode图表中的内存使用量从未下降。

Instruments中的“持久字节”列是您应该查看以确定应用程序的内存使用情况的内容。


谢谢Mark。这就是我收集到的,但有没有人能够确认这就是Xcode图表所显示的?我也想知道Xcode是否可能显示了分配的内存块,或者我可能有某种碎片问题? - JoGoFo
Allocations工具不会记录OpenGL ES纹理分配。Xcode的内存图可能显示Allocations工具无法显示的纹理内存分配。 - Swift Dev Journal
谢谢Mark,这正是问题所在。定期清除我的纹理缓存可以解决这个问题。我会更新我的问题并接受你的答案 - 再次感谢! - JoGoFo
1
@MarkSzymczyk 我认为说Xcode仪表盘图显示总字节数是不正确的。我没有找到官方文档,但该值几乎总是与Activity Monitor当前总内存列中看到的值相匹配。指出Instruments不显示OpenGL ES纹理似乎更合理和正确。但现在我认为这个答案是误导性的。 - ospr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接