1

我正在做一个小的 cocos2d 演示的内存测量,演示的任务是添加一个 png 图像到 cocos2d 纹理缓存中,我使用的监视器是 Instruments 中的 Allocations 和 Activity Monitor。

测试设备是ipod touch4。

为了找出应用程序的内存和分配的活动字节之间的关系,我设计了两个测试场景。

第一种情况是将纹理添加到缓存中,然后立即将其删除。测试代码如下:

CCTextureCache* 缓存 = [CCTextureCache sharedTextureCache];

CCTexture2D* tex = [缓存 addImage:@"textureatlas_RGBA8888.png"];

[缓存删除纹理:tex];

第二种情况是将纹理添加到缓存中,但将其保留在缓存中。测试代码如下:

CCTextureCache* 缓存 = [CCTextureCache sharedTextureCache];

CCTexture2D* tex = [缓存 addImage:@"textureatlas_RGBA8888.png"];

png 文件大小为 270KB,大小为 1024 * 1024,颜色深度为 32 位,其纹理将占用 1024 * 1024 * 4 字节(32 位)= 4096 KB 的缓存。

测试结果如下:

第一种情况的结果:

在此处输入图像描述

在将图像添加到缓存期间,活动字节将增加到6.16MB,过一段时间,它会恢复到略多于2.08MB

在应用程序完成所有操作之前,活动字节的水平将保持稳定。此时,Activity Monitor 中的 real mem 是11.61MB

第二种情况的结果:

在此处输入图像描述

第二个测试的图表与第一个相似,但是,当 live bytes 稳定时,真人是15.62MB

我的第一个问题是:

为什么即使在第二种情况下我不删除缓存中的纹理,图形也几乎相同?分配不将纹理视为内存中的实时字节吗?

第二个问题是:

正如我从这篇文章中了解到的:如何优化 Cocos2D 应用程序的内存使用和包大小(http://www.learn-cocos2d.com/2012/11/optimize-memory-usage-bundle-size-cocos2d-app/ ),由于png文件会先转换为UIImage,然后添加到纹理缓存中,一个1024*1024的纹理使用4MB内存,加载时会短时间使用8MB内存为什么我在分配跟踪图?

谢谢你的帮助。

4

0 回答 0