缩略图存储策略

时间:2012-12-23 22:19:19

标签: objective-c ios thumbnails photo-gallery

我正在处理需要“照片”类型呈现多个缩略图图像的应用程序的一部分。全尺寸图像非常大,每次生成缩略图花费的时间太长,所以我要缓存缩略图。

我很难确定创建文件系统后如何最好地存储缩略图。我可以想到一些可能性,但我不喜欢它们中的任何一种:

  • 将缩略图保存在与原始文件相同的目录中,并将_Thumb添加到文件名(image.png和image_Thumb.png)。这会造成一个混乱的目录,我认为性能会因为读取这么多不同的文件而成为一个问题。
  • 将缩略图保存在各自的子目录中,文件名与原始文件相同。我认为这稍微清晰一些,但我仍然会打开很多不同的文件。
  • 将所有缩略图保存到缩略图文件。我认为这通常在Windows和OS X中完成?我喜欢这个主意,因为我可以打开一个文件并从中读取多个缩略图,但我不确定如何将它们存储在同一个文件中并将它们与原始文件相关联。 编辑:我想过使用NSKeyedArchiver/unArchiver但是从我能找到的内容来看,无论何时添加/删除缩略图,我都必须重新创建整个存档。也许我有一些东西可以忽略?
  • 编辑将缩略图存储在核心数据/ sqlite数据库文件中。多年来我听说,由于性能低下以及在(相对)长时间内完成的写入数据库损坏的可能性,将图像存储在数据库文件中是一个坏主意。有没有人有这样的经验?

有关最佳方法的任何建议吗?

1 个答案:

答案 0 :(得分:2)

我会选择第二种选择。在iDevices上,您使用闪存。与HDD相比,访问许多文件的性能损失非常低。您也可以在内存中缓存一些内容,以防止经常读取同一个文件。 SDWebImage缓存机制包含一个很好的示例,如何做到这一点。

第三个选项 - 使用一个文件可能意味着使用数据库文件。如果存储未压缩的数据,您可以在那里获得一些性能改进。您需要进行一些性能测试,因为加载更多数据(未压缩形式的拇指)可能会降低速度,从而节省CPU以获得更多存储访问。

组合方法是将缩略图存储为文件,但采用未压缩格式(不是.jpg,.png等)

第四个选项值得考虑,只要缩略图相当小:将它们保存在CoreData中。