Re: [問題] Datareader的限制問題

作者: tomex (Tomex Ou)   2014-07-25 02:16:58
DataReader是ADO.NET裏即時讀取資料進記憶體的類別,
當然一個連線CONN同個時間應該只能用一個DataReader在讀取資料
不過實務上我們會同時讀取nested datareader二層的資料
這部分的討論請詳見:
c# - SqlDataReader inside SqlDataReader - Stack Overflow
http://0rz.tw/YBYsZ
MultipleActiveResultSet就是解決同時讀取多筆資格的即時reader
不過這種其實沒多大意義,也不用鑽研太多
畢竟reader只是讀即時資料的類別,最終資料還是要讀進datatable
或orm poco物件,再去做處理呀!
資料庫裏同一個record,也會同時被不同的sql指令讀取
而產生record被lock或新舊的問題
而datareader就是該connection去讀資料的一個類別
你硬要同時要在一個conn下去產生兩個reader來nested reading
也容易引起競爭資源的問題,
mars(多筆結果)的功能只是讓reader去讀取不同的地方
只是避免資源讀取的競爭衝突而己,
所以這種底層的東西研究太深入,也沒實務上的意義。
我覺得sql指令下得好,以最少的資料量取回,就放在離線記憶體的datatable內
再作比對即可,不一定得想在即時reader作nested reading比對
這就像網上看線上即時視頻,免下載線上觀看,
但這樣作總是容易遇到網路斷線或龜速的時候,還是先下載一份再看為宜。
在entity framework取值作orm時,底層也都是用reader讀值的
不要去計較太多這類的,因為reader的讀取資料又分好多種方式決定效率
所以我們不用硬去記憶這種,只要將reader認為是讀即時資料的工具就好。

Links booklink

Contact Us: admin [ a t ] ucptt.com