2016-03-16 32 views
1

我试图用OLEDB获得与Ado.Net类似的性能,但没有成功。 我能得到的最好是比Ado.Net慢50%,所以我认为我做错了什么。我只需要向前阅读记录集,无需更新。比较OLEDB和Ado.Net的性能

ADODB::_ConnectionPtr con; 
    con.CreateInstance(__uuidof(ADODB::Connection)); 
    con->ConnectionString = "..."; 
    con->Open("", "", "", ADODB::adConnectUnspecified); 

    ADODB::_RecordsetPtr rs; 
    rs.CreateInstance(__uuidof(ADODB::Recordset)); 

    rs->Open(bstr_t("select * FROM BigTable"), _variant_t((IDispatch *)con), ADODB::adOpenForwardOnly, ADODB::adLockReadOnly, ADODB::adAsyncFetch); 

    rs->MoveFirst(); 
    int count=0; 

    while (! rs->EndOfFile) 
    { 
     ++count; 
     rs->MoveNext(); 

    } 

    rs->Close(); 

我正在使用Native Client OLEDB提供程序。 是否有其他选项(不包括.net)以更快的方式读取数据?

+0

如果表是很大的,供应商不应该的问题。此外,MS宣布打算使ODBC成为多年前最快的选项 –

回答

1
+0

感谢您的回答。我修改了ODBC示例,并且实际上获得了与Ado.Net相同的性能。继续不明白我在测试代码中缺少的内容。 – alangab

+0

我认为你遇到的性能问题是由于在OLE-DB上使用ADO的开销。我认为无论是直接使用ODBC还是OLE-DB(我已经添加了一个链接到我的答案)都会给你类似ADO.NET的性能。 –