【问题标题】:Tips for reducing Core Animation memory usage减少 Core Animation 内存使用的技巧
【发布时间】:2009-02-11 13:24:29
【问题描述】:

所以情况是这样的:

我有一个屏幕大小的 CALayer,我将内容属性设置为 2 Mb JPEG,大小约为 3500 x 2000 像素,分辨率为 240ppi。

我预计使用 CALayer 会产生一些开销,但我的示例应用程序(仅执行上述操作)显示使用了大约 33Mb RSIZE、22Mb RPVT 和 30Mb RSHRD。我注意到,以 64 位运行应用程序时,这些数字比以 32 位进程运行时要好得多。

我正在做我在这个示例来自的实际应用程序中能想到的所有事情,包括将我的 CGImageRefs 重新采样为仅是图层的大小,但这对我来说似乎无关紧要 - 不应该更简单吗?

有没有人遇到过减少 CALayers 和 CGI​​mageRefs 使用的内存量的好方法?

【问题讨论】:

    标签: cocoa memory core-animation calayer


    【解决方案1】:

    首先,您将在普通 CALayer 中遇到大小图像的问题,因为您可能会达到 2048 x 2048 的纹理大小限制(取决于您的显卡)。像这样的应用程序就是 CATiledLayer 的设计目的。 Bill Dudney 在他的 blog(大 PDF)和 the code that accompanies his book 上有一些代码示例。

    考虑到它将作为未压缩的位图存储在您的 CGImage 中,如此大的图像会占用如此多的内存对我来说并不奇怪。除了将图像缩放到所需的分辨率并使用 CATiledLayer 平铺之外,我想不到太多。将 CGImageRef 分配给 CAlayer 的内容后,您是否正在释放它?那时你不需要坚持下去。

    【讨论】:

    • 我将 CGImageRef 放在图层的 contents 属性中的唯一原因是为了节省一些时间 - 我想在非常快速地再次从磁盘加载与保留图像之间进行权衡周围将是值得的。不过我会尝试发布它,看看有什么影响 - 谢谢!
    • 释放它只产生了一点影响,但将这些图像保存在内存中似乎是罪魁祸首。是否可以使用 CGImageRefs 将压缩版本保存在内存中并即时解压缩?当然,这比再次从磁盘读取要快...
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    相关资源
    最近更新 更多