2010-03-25 57 views
3

有誰知道DbDataReaders實際上是如何工作的。我們可以使用SqlDataReader作爲例子。SqlDataReader/DbDataReader實現問題

當你做對以下

cmd.CommandText = "SELECT * FROM Customers"; 

var rdr = cmd.ExecuteReader(); 

while(rdr.Read()) 
{ 
    //Do something 
} 

是否數據讀取器都行的內存,或者它只是搶一個,然後當讀取被調用時,它進入數據庫,並搶下一個?看起來只是將一個內存帶入內存將會是一個糟糕的表現,但將它們全部引入到ExecuteReader的調用中需要一段時間。

我知道我是對象的消費者,他們如何實現它並不重要,但我只是好奇,我想我可能會花幾個小時在Reflector中獲得一個想法它在做什麼,所以我想我會問一個可能知道的人。

我只是好奇,如果任何人有一個想法。

回答

5

如上所述here

使用DataReader可以通過 檢索數據儘快提高 應用性能兩者,因爲它是 可用,並且(默認)存儲 只有一行在存儲器中的時間, 減少系統開銷。

而據我所知,這是每個讀者在.NET框架中工作的方式。

4

狂想曲是正確的。

結果返回查詢 執行,並存儲在客戶端上的 網絡緩衝區,直到你 使用 Read方法DataReader的

我跑的測試要求他們在等10,000記錄數據集上使用DataReaders vs DataAdaptor,我發現DataAdaptor的持續時間比DataReader快3-4毫秒,但DataAdaptor最終會佔用更多的內存。

當我在相同的50,000條記錄數據集上運行相同的測試時,我看到DataReader端的性能增益達到了50毫秒。因此,如果你有一個長時間運行的查詢或者一個巨大的結果集,我認爲你可能更適合使用DataReader,因爲你可以更快地得到結果,而不必拘泥於所有的數據記憶。記住DataReader只是前向也很重要,所以如果你需要在結果集中移動,那麼它不是最好的選擇。