磁盘缓存与重新创建映像

时间:2011-10-17 08:43:29

标签: iphone objective-c ios caching core-graphics

我目前有一个应用程序,我在那里进行了大量的图像处理。我基本上拍摄的图像是320x320(Retina上的或640x640 )并将其缩小到128x128(Retina上的或256x256 ),然后将其四舍五入并应用光泽的高光。一切都是使用Core Graphics绘图完成的。

在任何时候都可能有大约600张需要此处理的图像,所以我在应用程序启动时使用后台线程执行大约40次并将它们缓存到FIFO队列中。当不在缓存中的图像需要处理时,我这样做并将其添加到缓存的末尾,丢弃第一个缓存的图像。如果再次需要第一张图像,则会经历相同的过程。

我想知道的是,将丢弃的图像保存到磁盘而不是在下次需要时从头开始重新创建它们会更有意义并且最终更有效,因为我可以改为阅读它们来自磁盘。

这些图像也使用CALayer显示,因此,由于从UIImageCGImage的转换,设置图层内容时可能会产生开销。如果我将它们存储在磁盘上,我相信它们可以直接读作CGImage

欢迎任何关于提高这一过程效率的想法和意见。

3 个答案:

答案 0 :(得分:1)

我个人的选择是使用磁盘缓存。

但是,你说'哪个更有效' - 你是什么意思?

  • 如果你的意思更快,那么磁盘缓存可能会赢。
  • 如果你的意思是更节省空间,那么重新创造它们就会赢。
  • 如果您的意思是降低内存使用率,那么这完全取决于您的实施!

您必须尝试并查看:)

但是,磁盘解决方案的优势在于,您的应用程序第二次启动时,它已经完成了处理,因此启动速度会更快。这就是我使用磁盘的原因。

答案 1 :(得分:0)

根据我的经验,保存然后从磁盘读取更快。我一遍又一遍地做了一些记忆警告,而不是保存和阅读。但是,唯一可以肯定的是尝试。我使用了大约1000张图像,所以在我的情况下我会使用磁盘。

答案 2 :(得分:0)

尝试从Internet下载和缓存UIImage / NSData的github的lib也很好。

可以是SDWebImage(https://github.com/rs/SDWebImage)或APSmartStorage(https://github.com/Alterplay/APSmartStorage)。

APSmartStorage有助于从网络获取数据,并以智能可配置的方式自动将数据缓存在磁盘或内存中。应该够好了。