0

我在 Windows 上有一些 C++ 代码,它们使用普通的旧 ADO(不是 ADO.NET)从一堆 SQL Server 数据库中检索数据。该代码使用只进游标以允许消防水带游标在产生大型 Recordset 的查询上实现最大数据吞吐量。

处理结果的代码如下所示,使用 ADO 2.7 的#import-generated 包装器:

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,这对整个数据库代码的读取性能产生了巨大影响。因为代码使用只向前游标,所以无法检查 RecordCount 属性,因为在使用只向前游标时它总是 -1。

是否有另一种方法可以检查未使用 BOF/EOF 检查的空 Recordset,或者加快此检查的速度?

我目前能想到的另一种选择是使用其他游标类型之一并检查这将如何影响数据吞吐量。

4

0 回答 0