2016-05-30 24 views
2

它是否加載此代碼中的所有記錄或使用類似SqlDataReader的東西?Dapper查詢(..):流或加載全部?

using (var c = new SqlConnection(_options.TargetConnectionString)) 
{ 
    c.Open(); 
    foreach(var record in c.Query("select * from Users")) // suppose N+1 records 
    { 
     // all records loaded or read one by one here? 
     // some work here... 
    } 
} 
+0

考慮使用SQL Server Profiler來調查此問題。但似乎所有的記錄都加載在你的情況。 – Vladimir

回答

4

這兩個選項都受支持。默認情況下,基於大多數查詢相當小,並避免「多記錄集」限制,數據被緩存到List<T>。要獲得沒有額外分配的基礎列表,請使用提供的.AsList()擴展方法。但是,如果您想要無緩衝的數據:請通過buffered: false。這將爲您提供一個包含原始IDataReader的枚舉器 - 適用於大量查詢。

+0

我明白了。另一個很好的答案在http://stackoverflow.com/questions/13026558/explanation-of-dapper-buffer-cache – Artyom

+1

@Artyom我不會相信那個人 - 他是一個完全的混蛋 –

+0

是的)他的回答更詳細,雖然) – Artyom