1

SQLite で、約 100 行と 6 列のテキスト (100 文字以内) のテーブルを使用するプログラムがあります。ボタンをクリックするたびに、プログラムはテーブルの行の内容をビューに表示します。

私の質問は、テーブル全体の内容を配列にコピーしてから、ユーザーがボタンをクリックするたびに配列から読み取るか、ユーザーがボタンをクリックするたびにデータベース内のテーブルにアクセスする必要があるかということです。どちらがより効率的ですか?

4

3 に答える 3

2

それはすべて依存しますが、データ全体を配列に格納するのではなく、必要に応じてデータベースから取得することは、一般的に非常に貴重なリソースであるメモリを最も効率的に使用することです。私の最も贅沢なメモリの使用は、テーブルの一意の識別子 (つまり、正しい順序で返される主キーのリスト) の配列を格納することです。これにより、データベースを毎回スキャンする必要はなくなりますが、一意の識別子は常に数値であるため、メモリをあまり消費しません。したがって、このサイズの何かについては、一般的に次のようにします。

  • データベースを開きます。
  • テーブルの一意の識別子のみの配列をロードします(SQL句を使用してテーブルビューに正しい順序で返されましたORDER BY)。
  • テーブル セルが構築されると、データベースに戻り、その 1 つのテーブル行について追跡してきた一意の識別子に対応する、その 1 つの行に必要ないくつかのフィールドを取得します。
  • 詳細ビューに移動すると、データベースからその 1 つの行が再び取得されます。と
  • すべて完了したら、データベースを閉じます

これにより、メモリを大量に消費することなく、優れたパフォーマンスが得られます。テーブルが異なっていた場合 (はるかに大きいまたははるかに小さい)、別のアプローチを提案する可能性がありますが、データの説明を考えると、これは合理的なようです。

于 2012-07-11T16:05:10.947 に答える
0

100 行と 6 列は、多くのデータではありません。iOS は、それよりも大きなデータを非常に効率的に処理できます。したがって、新しい配列の作成について心配する必要はありません。データベースからの読み取りは問題なく動作するはずです。

于 2012-07-11T15:51:06.313 に答える
0

私にとっては、ビューの読み込みごとにデータベースを再読み込みし、完了したらコンテンツを削除する方がはるかに簡単でした。

コンテンツをメモリに保持するオーバーヘッドは、小さなデータセットの迅速な読み取りを相殺するには大きすぎました。

于 2012-07-11T15:35:45.353 に答える