1

データベースからの大きな結果セットをメモリに保存したいと考えています。すべてのレコードは可変長であり、アクセス時間は配列と同じくらい高速でなければなりません。これを実装する最良の方法は何ですか? 別のテーブルにオフセットを保持し、すべてのレコードを連続して保存することを考えていましたか? 奇妙ですか?(プログラミング言語: Delphi)

4

5 に答える 5

3

私があなたを完全にフォローしているかどうかはわかりませんが、TList を見てください。

少なくとも Delphi 7 では、ポインタの配列として実装されています。返される結果の数がわかっている場合は、 capacity プロパティを使用して事前にリストを割り当てることができます。

スペースがなくなると、リストは自動的に大きくなります。どれだけ大きくなるかは、リストの大きさによって異なります。

classes ユニットのソースを見て、それが何をしているのかを確認してください。

編集: また、D2009 では genric サポートが TList に追加され、使いやすくなりました。

于 2008-11-12T10:43:55.227 に答える
1

おそらく最善の方法は、レコードへのポインターの配列を含めることです。その場合、オフセットを処理する必要はなく、ルックアップは一定の時間になります。

于 2008-11-12T08:02:32.960 に答える
0

mj2008に続いて、レコード配列の代わりに TCLientDataset を使用できます。その結果セットの大きさは?

于 2008-11-12T17:03:21.980 に答える
0

私は TList を使用し、レコードへのポインターを保存します。

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
于 2008-11-12T11:22:40.217 に答える
0

データベースの MEMORY バージョンを使用してみませんか? ほとんどの場合、通常は SQL キーワード MEMORY を使用して、完全なテーブルをメモリに保持する方法があります。テーブルをディスクからメモリ テーブルにコピーすると、すべての通常のデータベース操作をメモリ速度で使用できます。これが DBISAM でうまく機能することはわかっています。

于 2008-11-12T11:25:31.303 に答える