3

我正在开发需要多个缩略图图像的“照片”类型演示的应用程序的一部分。全尺寸图像很大,每次生成缩略图都需要很长时间,所以我打算缓存缩略图。

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

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

关于最佳方法的任何建议?

4

1 回答 1

2

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

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

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

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

于 2012-12-23T23:10:49.027 回答