I fallet med att köra en grundläggande fråga kan det fungera på det sättet (visst är det möjligt) - dock i fallet med att fråga efter en naken Table<T>
, det kanske vara att allt buffrar först; du kan kanske prova att fråga räkningen under iterationen, eller köra en spårning. I det här fallet misstänker jag den buffrar först.
Re closed:det beror också på;p Om någon använder foreach
, sedan ja:eftersom foreach
disponerar uttryckligen iteratorn via finally
. I alla fall! Det är inte garanterat om någon gör det till exempel (väldigt stygg och slapp):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
eftersom iteratorn inte a:slängs, b:avgaser sig själv och c:inte kraschar, kommer den inte att stängas av ordentligt (något av dessa tre tillstånd kommer stäng den ordentligt). Betoning:detta är ett patologiskt fall:normalt är det rimligt säkert att säga "det kommer att stänga, ja".
Om du vill ha garanterad icke-buffring, notera att "dapper" har det, om du ställer in buffered
till false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(den kan också hantera parametrarna etc.)