我正在处理需要多个缩略图的“照片”类型演示的应用程序的一部分。完整尺寸的图像非常大,并且每次生成缩略图的时间都太长,因此我将缓存缩略图。

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

  • 将缩略图与原始文件保存在同一目录中,并在文件名(image.png和image_Thumb.png)中添加_Thumb。这造成目录混乱,我认为性能会成为问题,因为会同时读取许多不同的文件以进行加载。
  • 将缩略图保存在自己的子目录中,并使用与原始文件相同的文件名。我认为这稍微干净一点,但是我仍在打开许多不同的文件。
  • 将所有缩略图保存到缩略图文件。我认为这通常是在Windows和OS X中完成的吗?我喜欢这个主意,因为我可以打开一个文件并从中读取多个缩略图,但是我不确定如何将所有缩略图存储在同一文件中并将它们与原始文件相关联。 编辑:我曾想过使用NSKeyedArchiver/unArchiver,但是从我发现的情况来看,无论何时添加/删除缩略图,我都必须重新创建整个存档。也许我忽略了某些东西?
  • 编辑将缩略图存储在核心数据/ sqlite数据库文件中。多年来,我听说过,将图像存储在数据库文件中是一个坏主意,因为它的性能较慢,并且可能需要较长时间才能完成写入操作而导致数据库损坏。有没有人有使用过这种方式的经验?

  • 对采取最佳方法有何建议?

    最佳答案

    我会选择第二种选择。在iDevice上,您使用闪存。与HDD相比,访问许多文件的性能损失非常低。另外,您可以在内存中缓存一些内容,以防止过多地读取一个文件和同一个文件。 SDWebImage缓存机制包含一个很好的示例。

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

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

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

    10-08 02:49