/ /サムネイルストレージ戦略-Objective-C、iOS、サムネイル、フォトギャラリー

サムネイルストレージ戦略 - 目的 - c、ios、サムネイル、フォトギャラリー

私は必要なアプリの一部に取り組んでいます複数のサムネイル画像の「写真」タイプのプレゼンテーション。フルサイズの画像は非常に大きく、毎回サムネイルを生成するのに時間がかかりすぎるので、サムネイルをキャッシュします。

サムネイルを作成した後、ファイルシステムにサムネイルを保存する最善の方法を決定するのに苦労しています。私はいくつかの可能性を考えることができますが、私はそれらのどれも好きではありません:

  • サムネイルをと同じディレクトリに保存しますファイル名に_Thumbが追加された元のファイル(image.pngおよびimage_Thumb.png)。これはディレクトリを乱雑にし、一度にロードするために非常に多くの異なるファイルを読み取るため、パフォーマンスが問題になると思います。
  • 元のファイル名と同じファイル名で、サムネイルを独自のサブディレクトリに保存します。これは少しきれいだと思いますが、私はまだたくさんの異なるファイルを開いています。
  • すべてのサムネイルをサムネイルファイルに保存します。これはWindowsとOSXで一般的に行われていると思いますか? 1つのファイルを開いて複数のサムネイルを読み取ることができるので、このアイデアは気に入っていますが、すべてを同じファイルに保存して元のファイルに関連付ける方法がわかりません。 編集: 私は使用を考えた NSKeyedArchiver/unArchiver しかし、私が見つけたものから、サムネイルが追加/削除されるたびに、アーカイブ全体を再作成する必要があります。おそらく私が見落としている何かがありますか?
  • EDIT サムネイルをコアデータ/ sqliteに保存しますデータベースファイル。パフォーマンスが遅く、完了までに(比較的)長い時間がかかる書き込みでデータベースが破損する可能性があるため、データベースファイルにイメージを保存することは悪い考えであると長年聞いてきました。誰かがこの方法でどちらかを使用した経験がありますか?

取るべき最善のアプローチに関する提案はありますか?

回答:

回答№1は2

私は2番目のオプションに行きます。iDeviceでは、フラッシュメモリを使用します。多くのファイルにアクセスすることによるパフォーマンスの低下は、HDDと比較して非常に低くなっています。また、同じファイルを頻繁に読み取らないように、一部をメモリにキャッシュすることもできます。 SDWebImage キャッシュメカニズムには、その方法の優れたサンプルが含まれています。

3番目のオプション-そのために1つのファイルを使用するとおそらくデータベースファイルを使用することを意味します。圧縮されていないデータを保存すると、パフォーマンスが向上する可能性があります。より多くのデータ(非圧縮形式の親指)をロードすると、CPUの節約が遅くなり、ストレージアクセスが増える可能性があるため、いくつかのパフォーマンステストを実行する必要があります。

組み合わせたアプローチは、サムネイルをファイルとして保存することですが、非圧縮形式(.jpg、.pngなどではありません)で保存します。

サムネイルが適度に小さい限り、検討する価値のある4番目のオプション:CoreDataに保存します。