2016-03-16 35 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的性能。 –