Im Fall der Ausführung einer einfachen Abfrage ist dies möglich funktionieren so (natürlich ist es möglich) - jedoch im Fall der Abfrage einer nackten Table<T>
, es könnte sei, dass alles zuerst gepuffert wird; Sie könnten vielleicht versuchen, die Anzahl während der Iteration abzufragen oder eine Ablaufverfolgung auszuführen. In diesem Fall vermute ich es wird zuerst gepuffert.
Re closed:das hängt auch;p davon ab, ob jemand foreach
verwendet , dann ja:seit foreach
verwirft den Iterator explizit über finally
. Jedoch! Es ist nicht garantiert, wenn jemand zum Beispiel (sehr frech und lasch):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
Da der Iterator dann nicht a:entsorgt wird, b:sich selbst erschöpft und c:nicht abstürzt, wird er nicht richtig heruntergefahren (eine dieser 3 Bedingungen wird richtig schließen). Betonung:Dies ist ein pathologischer Fall:Normalerweise ist es einigermaßen sicher zu sagen "es wird geschlossen, ja".
Wenn Sie garantiertes Non-Buffering wollen, beachten Sie, dass "dapper" das hat, wenn Sie buffered
setzen auf false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(es kann auch mit den Parametern usw. umgehen)