5

画像をBLOBとしてsqliteデータベースに保存するのは良い考えかどうか疑問に思っていますか?誰かがパフォーマンスを持っていますか-画像(blob)の保存の経験がありますか?

私のAndroidアプリは小さなもので、20〜100枚の画像を処理する必要があります(画像あたり100 kb〜1 MB)。最悪の場合:私のデータベースは100MBのサイズに達する可能性があります。これはデータベースのパフォーマンスに大きな影響を与えますか?平均的なケース:私のアプリの平均的なユーザーは、画像あたり200 kbの画像を40枚持っていると思います。したがって、データベースのサイズは約8MBになります。ところで。もちろん、データベースには他の「通常の」データも格納されるため、画像データベースだけではありません:)

ストレージ(内部またはSDカード)に保存されているイメージへのパスを保存する方が良い方法ですか?データベースから画像ファイルのパスを取得し、ファイルから画像を開いて読み込むのは少し遅くなると思います(ただし、一度に2つの画像を読み込むだけでよいので、それほど重要ではありません)。

2番目の質問:2番目のアプローチ(イメージファイルへのパスをデータベースに保存し、イメージファイルをロードする)を使用する場合:このシナリオでは、ディスクキャッシュ(DiskLruCache)は便利ですか?パフォーマンスが大幅に向上しますか?私の理解では、ディスクキャッシュは(エンコードされたjpgまたはpngの代わりに)ビットマップを保存するため、ディスクキャッシュは保存から直接ビットマップをロードし、私のアプリは画像(jpgまたはpng)をデコードする時間を節約します。あれは正しいですか?ところで。「データベースアプローチ」では、すでにデコードされた画像をビットマップとして保存します。それで、私にはディスクキャッシュに似たもののように見えますね。

編集:私はあなたに言うのを忘れました、私はデバイスに永続的な画像を保存する必要があると。たとえば、Webサービスから取得した画像のキャッシュについては話していません...

4

1 に答える 1

3

私の推測では、データベースに大量の情報を保存すると、特に画像自体を取得するときに、データベースが大幅に遅くなると思います。

一方、私が理解しているように、すべてのユーザーは、アプリケーションのインストール後に自分に関連付けられた画像をダウンロードしています。これは、数日前に尋ねた私の質問で別の SO ユーザーが私に勧めたライブラリを使用するのに最適な場所です: Universal Image Downloader。ここに私が話しているスレッドへのリンクがあります。

このライブラリはオンディスク キャッシングを使用しますが、すべての複雑さを抽象化します (うまくいけば、私はまだ試していませんが、有望に思えます)。

于 2013-01-01T13:14:38.243 に答える