【问题标题】:iOS texture allocation shows twice as much memory usage in profileriOS 纹理分配在分析器中显示两倍的内存使用量
【发布时间】:2012-12-28 09:12:28
【问题描述】:

我整个上午都在为此苦苦挣扎。还不能在设备上进行测试,我依靠分析器显示的内容来粗略地看到没有重大问题。其中一个我认为很严重的事实是,无论何时我在 Cocos2d 或自定义代码中创建 2D 纹理 - 直接提供 openGL,我在分析器中都将我的所有纹理显示为两个分配。

例如当我创建一个大约 1MB 数据的纹理 512x512x4 时,我的活动字节使用量增加了 2MB,我可以在活动对象列表中看到两个重的内存块,每个 1Mb - 与我的纹理完全相同。

让我强调这一点 - 这不是我提供给 glTexImage2D() 的原始图像文件,它在析构函数中被删除,我已经检查了很多次。此外,我在 Cocos2d 示例项目中也观察到的问题 - 很简单,纹理的所有内存都增加了一倍。

下面两张截图——一张来自 cocos2d 应用程序,显示了两个 600KB 的纹理,每个纹理在分析器中显示为四个分配的对象:

并直接使用openGL和通过libpng提供的图像自定义分配和创建纹理-显示为两个1Mb的实时对象。

如果有人能在这方面启发我,我将不胜感激。也许在设备情况下看起来不同。

问候, 秒。

【问题讨论】:

  • 我有完全相同的铅。你找到这个双重分配的原因以及如何避免/释放它了吗?

标签: ios memory cocos2d-iphone profiling textures


【解决方案1】:

这是 cocos2d 中的正常行为。它首先将图像文件加载为 UIImage,然后将其转换为 CCTexture2D。这意味着在大多数情况下,内存使用量是您预期的两倍。下一帧应该释放额外的内存。

您可以在我的memory optimization blog post 中找到有关此行为的更多信息。您还将了解到,使用 .pvr.ccz 不仅会显着减少内存开销,而且它们的加载速度也会比 PNG 快得多(更不用说在 cocos2d 中加载速度非常慢的 JPG)。

【讨论】:

  • 我说这不是图像文件内存。它在创建纹理时被复制并在整个应用程序运行期间保持活动状态 - 即使图像文件很久以前就已发布。除了关于 cocos2d 的争论不能忍受机会,因为第二个屏幕截图清楚地显示在我的自定义绘图原型中,纹理内存在整个时间都被复制 - 不仅在我加载它时 - 而且它与 cocos2d 无关,因为我有说 - 我自己用 pnglib 加载图像,用 glTexImage2D 创建纹理,然后释放文件和临时缓冲区。
  • 我加载的每个纹理在模拟器中似乎都加倍了 - 我怀疑这可能是模拟器的正常行为 - 因此我的问题是是否有人可以在设备上实际检查。
猜你喜欢
  • 2021-04-03
  • 1970-01-01
  • 2013-01-11
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多