Delphi で実装する必要がある、他の人々による優れたパフォーマンスの提案がいくつかあります。それらを考慮する必要があります。私はADOに焦点を当てます。
バックエンド データベース サーバーが何であるかを指定していないので、具体的には言えませんが、ADO について知っておくべきことがいくつかあります。
ADO レコードセット
ADO には、RecordSet オブジェクトがあります。この場合、その RecordSet オブジェクトは基本的に ResultSet です。RecordSet を繰り返し処理することの興味深い点は、それがまだプロバイダーと結合されていることです。
カーソルの種類
カーソル タイプが Dynamic または Delphi のデフォルト キーセットの場合、RecordSet がプロバイダーから新しい行を要求するたびに、プロバイダーはレコードを返す前に変更があったかどうかを確認します。
したがって、結果セットを読み取ってコンボボックスに入力するだけで、変更されている可能性が低い TADOQuery の場合は、静的カーソル タイプを使用して、更新されたレコードのチェックを回避する必要があります。
カーソルが何かわからない場合、Next のような関数を呼び出すと、現在のレコードを表すカーソルが移動します。
すべてのプロバイダがすべてのカーソル タイプをサポートしているわけではありません。
キャッシュサイズ
Delphi と ADO の RecordSet のデフォルトのキャッシュ サイズは 1 です。これは 1 レコードです。これは、カーソル タイプと組み合わせて機能します。cachesize は、一度にフェッチして保存するレコードの数を RecordSet に指示します。
Next のようなコマンド (実際には ADO では MoveNext) をキャッシュ サイズ 1 で発行すると、RecordSet はメモリ内に現在のレコードのみを保持するため、次のレコードをフェッチするときに、プロバイダーから再度要求する必要があります。カーソルが静的でない場合、プロバイダは次のレコードを返す前に最新のデータを取得する機会が与えられます。したがって、更新されたデータをプロバイダーが取得できるようにするため、サイズ 1 は Keyset または Dynamic に適しています。
明らかに、値が 1 の場合、カーソルが移動するたびにプロバイダーと RecordSet の間で通信が行われます。カーソルの種類が静的である場合、これは望ましくないオーバーヘッドです。そのため、キャッシュ サイズを増やすと、RecordSet とプロバイダー間のラウンド トリップの回数が減ります。これによりメモリ要件も増加しますが、より高速になるはずです。
また、キーセット カーソルのキャッシュ サイズが 1 より大きい場合、必要なレコードがキャッシュにある場合は、プロバイダーから再度要求されないため、更新が表示されないことにも注意してください。