0

私は Windows 上に、(ADO.NET ではなく) 単純な古い ADO を使用して一連の SQL Server データベースからデータを取得する C++ コードをいくつか持っています。このコードでは、順方向専用カーソルを使用して、大きな Recordset を生成するクエリで最大のデータ スループットを実現するために、消防ホース カーソルを許可します。

結果を処理するコードは、ADO 2.7 の #import によって生成されたラッパーを使用して、次のようになります。

ADODB::_RecordsetPtr records("ADODB.Recordset");

records->Open(cmd, _variant_t(static_cast<IDispatch *>(m_DBConnection)), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adCmdText);

if (!(records->BOF && records->EOF))
{
  ... Loop over the recordset and extract data from each record ...
}

プロファイリングでは、上記のループの 40% 近くが BOF の呼び出しに費やされており、これがデータベース コード全体の読み取りパフォーマンスに大きな影響を与えていることが示されています。コードは前方スクロールのみのカーソルを使用するため、前方スクロールのみのカーソルを使用する場合は常に -1 であるため、RecordCount プロパティを確認することはできません。

BOF/EOF チェックを使用していない空の Recordset をチェックする別の方法、またはこのチェックを高速化する方法はありますか?

現時点で考えられるもう 1 つの方法は、他のカーソル タイプのいずれかを使用して、それがデータ スループットにどのように影響するかを確認することです。

4

0 に答える 0