这是信息个人资料->泄漏在 Xcode 中,我在 iPad 2 上运行了大约 21 分 12 秒,然后崩溃了。
实时字节 ---- 5.45 MB
生活----13547
暂时 ---- 3845036
总字节数 -- 720.31 MB
当应用程序在设备上运行时,应用程序崩溃打印收到内存警告在控制台中。
我不太确定它是如何工作的。
但请告诉我,如果一个应用程序在设备上运行了 21 分钟,在此运行期间总共使用了大约 720 MB 内存,但活动字节从未超过 7.0 MB。
我接受该应用程序一开始使用 3.25 MB 作为活动字节,并且在这次运行期间活动字节达到 5.45 MB,而且我不太确定活动字节是如何继续增加的。
但我的问题是:
它是否是一个糟糕到足以在设备上运行时产生崩溃的应用程序?
Or
我还面临其他问题吗?
您可能会在 CCTextureCache 单例中留下大量精灵。每次创建 CCSprite 时,纹理都会被缓存(静默),以便下次引用它时,加载和呈现会更快(快得多)。在模拟器中运行分配分析(参见下面的两张图片):
and
顶部图像来自设备上的分配分析。最大内存 4.4 Mb。
底部图像是相同的应用程序,相同的游戏顺序,同时在模拟器中进行分析(峰值约为 78 Mb)。通过在模拟器中运行,我可以在分配中看到我的精灵使用的内存。在设备中,分配工具不占用该内存。
您正在寻找趋势和离散的大跳跃。如果你再也没有回来,你可能会留下未使用的精灵。就我而言,我选择在游戏执行的特定点从纹理中释放特定资源。这是来自 appController 的示例
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
MPLOGERROR(@"Before purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];
MPLOGERROR(@"%After purge");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];
}
这是最后的手段,暴力清理。但是您可以在游戏过程中的不同时刻删除特定纹理,而不会影响应用程序的“感知”响应能力。缓存在原则上通常是合理的,但在资源有限的情况下可能会很快变得棘手。了解它、进行实验,最终您将找到“保留/消失”的正确组合,以实现平稳的应用程序性能。
附注尽管模拟器对于某些测试来说效果很好,但不要使用它的“性能”作为基准。当涉及到图形时,模拟器性能毫无意义,它不使用计算机的 GPU(这就是您看到图形内存分配的原因:))。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)