画像が添付された一連のレコードを保存するアプリを作成しています。800x1067 ピクセル (約 270 kb) のサイズの画像を定義することを考えています。
この種の画像を SQLite データベースに保存するのは合理的ですか? このテーブルには何百ものレコードがあると思います。
あなたはそれについてどう思いますか?
できます (許容範囲です) が、これを試してみたところ、SQLite は遅すぎることがわかりました。SQLite に画像を保存すると、パフォーマンスが大幅に低下します。アプリの Documents フォルダー内のカスタム ディレクトリ構造に画像を保存し、それらのファイル名への参照を SQLite に保存するだけです。一部の人々が喜んでサムネイルを SQLite に保存していることは知っています (サムネイル画像を使用しても、これらの小さな画像では無視できますが、パフォーマンスが低下します) が、個人的にはすべての画像を Documents フォルダーに入れます。
パフォーマンスをテストするために、 を使用しimageWithContentsOfFile
て画像をロードする場合と、Core Data から画像を読み取ってUIImage
usingにロードする場合をテストしましたimageWithData
。ドキュメントから 10,000 個のサムネイルを取得するのに iPhone 4S で 12.988 秒かかり、Core Data から取得するのに 23.743 秒かかりました。(そして、明らかに、独自のNSCache
および/またはを使用する場合、たまたま同じ画像を取得するとimageNamed
、はるかに高速になります。)これは確かに Core Data ベンチマークですが、数か月前に (FMDB 経由で) sqlite を使用してみました。より大きな画像では、sqlite との違いimageWithContentsOfFile
はかなりのものでした。