9

テーブルにビットマップを保存する必要があるプロジェクトに取り組んでいます。これらのビットマップは、リストに表示されるデータアダプターで使用されます。このテーブルには、1000を超える画像が含まれている可能性があります。現在ファイルに保存していない理由は、画像の読み取りとデータベースへの書き込みが非常に高速であるためです。

私が本質的に探しているのは、SQLiteのカーソルの制限を理解することです。カーソルはどのようにメモリにロードされますか?クエリ結果をメモリに配置しますか、それともある種の一時的な読み取り/書き込みファイルを作成しますか?大きなデータセットをクエリするとデバイスのメモリが不足するという問題に遭遇したくありません。

4

2 に答える 2

1

私が思い出すと、それはそれができる限り多くの結果をメモリにキャッシュしておくでしょう。通常、ソフトヒープ制限を下回っている必要があります。これは勧告的な制限であるため、SQL_NOMEMを返すよりも制限を超える方が優先されます。

キャッシュメカニズムのためにディスクに書き込むとは思わない。各画像がメモリに収まり、インデックスに含まれていない限り、問題になることはありません。

私はAndroidプログラマーではありませんが、その価値はあります。これらのもののいくつかはカスタマイズされている可能性があります。

背景として、sqlite_stepはデフォルトライブラリのカーソルです。Androidが独自のメカニズムを実装しているかどうかはわかりません。動的メモリ割り当てに関する一般的な情報は、彼らのページにあります。

于 2012-06-23T04:51:32.747 に答える
0

これは私が行った古い投稿です。私の解決策は、画像をファイルに保存し、画像へのパスをデータベーステーブルに保存することでした。これはよりクリーンで、はるかに高速に見えました。

大きなバイナリデータをテーブルに保存するという考えは、正しいことではないようです。なぜそれが良い考えではないのかについての詳細な情報はありませんが、それは私が少しの研究から感じていることです。

于 2016-04-07T15:43:04.730 に答える