極具威力的 DBPROP CLIENTCURSOR

2021-05-28 10:10:38 字數 885 閱讀 8083

今天做了乙個測試,結果令我非常吃驚,沒想到會有這麼大的差異。

原本是想測試 c# 的 ado.net 的效能和 c++ 的 oledb 的效能差異如何的。原以為應該是 oledb 優勝於 ado.net 的,但是結果卻相反。

資料庫是 sql server 2005 的,資料庫和測試機是同一區域網的兩台高效能機器,之間是千兆網連線的。測試是用 c# 使用 sqldatareader 遍歷乙個有 38 萬條記錄的表,只讀取 3 個小字段;而 c++ 則使用 oledb templates 做同樣的事情。

結果非常懸殊,ado.net 開啟資料集用時平均在 100 毫秒左右,而 oledb 則是 1200 毫秒左右,差不多 12 倍的差別,讀取時間 ado.net 是 700 毫秒左右,而 oledb 則是 110 多秒左右,有 150 多倍的差別。

這樣的結果,感覺不可思議,怎麼 c++ 的效能還不如 c# 嗎?而且還相差這麼懸殊?是**出的問題呢?

想了一下,估計和 oledb 的使用方式有關係。c++ 的 oledb 訪問**是直接用嚮導生成的,記得以前使用都要加一些處理,找回以前的**看了一下,發現是以前的**都有使用 dbprop_clientcursor 優化的。加了一下再測試。

結果開啟資料集的時間變成 1000 毫秒左右,讀取時間則是 600 毫秒左右,和之前比較差別非常明顯。以前也知道使用客戶端游標能夠提高訪問效能,但是沒想到的是這樣大的差別。

而且測試還反映了另乙個問題,就是 ado.net 使用 sqldatareader 比 oledb 還快一點點。估計是由於 sqldatareader 內部是直接使用 sql server 專門的 api 優化了訪問的,所以有這樣的微小效能差別。

這個測試同時還說明了,有時候設想的情況並不見得就是對的,特別是效能的優化,一定是要進行實際測試和分析的,不能想當然。

計算的威力

有一句話叫做 熟視無睹。意思是,當人們對某一現象習以為常時,就容易忽略現象背後的本質。同樣,當計算機開始並逐漸勝任越來越廣泛的任務時,也許,是時候重新認識下計算機了!計算機 what 計算機能夠用來看電視電影,異地聊天交友,休閒遊戲,遠端教學,控制飛機航行,可是,計算機到底是什麼呢?其實,計算機不過...

倒排計畫的威力

戰場中有衝鋒號,專案實施中也有。衝鋒號要在戰鬥行將結束時吹起,不能太早,也不能太晚。太早,容易損失過大,甚至被敵人反吃 太晚,容易錯失戰機,以致無法再發起衝鋒甚至導致失敗。倒排計畫是專案實施的衝鋒號,對解決膠著的專案戰況有奇效。一方面可以破除部門壁壘。衝鋒號吹起,沒人敢回縮,也沒人敢推諉 扯皮。時間...

發揮語言的威力

本人在專案開發中,開始一直用php,在享受著php的靈活的功能時,同時也遇到了一些問題,如php的odbc介面連線 遠端oracle 問題,就是報告你無m骺 幏饢鯰ns服務名,經過一番捉摸,現在還是沒有找到問題的答案,燃眉之急!情急之中,想出一妙計,眾君請看 我用asp連線遠端資料庫,當然一切ok,...