使用DataReader提高性能的一些技巧

下面是使用DataReader提高性能的一些技巧:

  l 在訪問任何與命令(Command)相關的輸出參數前DataReader必須關閉

  l 在讀完數據後就關閉DataReader。如果你正在使用的連接只返回該DataReader,在關閉DataReader後立即關閉連接。

  l 另一種明確地關閉連接的方法是給ExecuteReader方法傳遞CommandBehavior.CloseConnection以確保當DataReader關閉時相關的連接關閉了。如果你從某個方法返回DataReader,並且沒有辦法控制DataReader或者相關的連接關閉的情況下特別有用。

  l DataReader不能在層之間遠程訪問。DataReader是設計用於連接數據訪問的。

  l 使用類型化的存取程序(例如GetString、GetInt32等等)來訪問列數據。這節省了將GetValue返回的對象作爲特定類型的必要的處理。

  l 在某一時刻只有一個DataReader能夠打開。。在ADO中,如果你打開一個連接並請求兩個使用只向前的只讀遊標的記錄集,ADO隱性地爲遊標的生命週期的數據存儲打開第二個不在連接池中的連接,接着隱性地關閉它。在ADO.NET中,如果你想在同一個數據存儲上同時打開兩個DataReader,你必須明確地建立兩個連接,每個DataReader一個。通過這種方法ADO.NET給了你對連接池使用的更多控制。

  l 默認情況下,DataReader在每個Read方法中把整個行載入內存中。這允許你隨機訪問當前行的任意列。如果隨機訪問是不必要的,爲了提高性能,把CommandBehavior.SequentialAccess傳遞給ExecuteReader調用。這改變了DataReader的默認行爲,只在需要時才把數據載入內存。注意CommandBehavior.SequentialAccess要求你按次序訪問返回的列。也就是,一旦你讀過了返回的某個列,就不能再次讀取它的值了。

  l 如果你結束了從DataReader中讀取數據,但是仍然有大量的未讀取的結果等待,那麼調用Command的Cancel比調用DataReader 的Close好。調用DataReader 的Close引起它檢索等待的結果並且先清空流後關閉遊標。調用Command的 Cancel刪除服務器上的結果,因此當DataReader關閉時,它不需要再讀取結果。如果你從Command返回輸出參數,則調用Cancel刪除它們。如果你要讀取任何輸出參數,不要調用Command 的Cancel;最後調用DataReader的 Close。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章