目标C语言 缩略图存储策略



我正在研究一个应用程序的一部分,该应用程序需要多个缩略图图像的"照片"类型表示。完整尺寸的图像非常大,每次生成缩略图都要花很长时间,所以我要缓存缩略图。

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

  • 将缩略图保存在与原始文件相同的目录中,在文件名(image.png和image_Thumb.png)中添加_Thumb。这将导致一个混乱的目录,我认为性能将成为一个问题,因为读取这么多不同的文件来一次加载。
  • 将缩略图保存在自己的子目录中,文件名与原始文件相同。我认为这是稍微干净,但我仍然打开了很多不同的文件。
  • 保存所有的缩略图到一个缩略图文件。我想这在Windows和OS X中是很常见的。我喜欢这个想法,因为我可以打开一个文件并从中读取多个缩略图,但我不确定如何将所有缩略图存储在同一个文件中,并将它们与原始文件相关联。编辑:我想使用NSKeyedArchiver/unArchiver,但从我能找到的,任何时候一个缩略图被添加/删除,我将不得不重新创建整个存档。也许我忽略了什么?
  • EDIT将缩略图存储在core data/sqlite数据库文件中。多年来,我一直听说将映像存储在数据库文件中是一个坏主意,因为性能较慢,而且在写操作时可能会损坏数据库,而写操作需要(相对)长时间才能完成。有人用过这种方法吗?
有什么最好的建议吗?

我会选择第二个选项。在设备上,你使用闪存。与hdd相比,访问许多文件的性能损失非常低。还可以在内存中缓存一些,以防止过于频繁地读取同一个文件。SDWebImage缓存机制包含了一个很好的如何实现它的示例。

第三个选项-使用一个文件可能意味着使用数据库文件。如果存储未压缩的数据,性能可能会有所提高。您需要做一些性能测试,因为加载更多的数据(未压缩形式的拇指),可能会减慢它节省CPU更多的存储访问。

将缩略图存储为文件,但以未压缩格式(不是。jpg, .png等)

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

最新更新