Nel caso di esecuzione di una query di base, può funziona in questo modo (certamente è possibile) - tuttavia, nel caso di query su una Table<T>
nuda , potrebbe sia che tutto bufferizzi prima; potresti forse provare a interrogare il conteggio durante l'iterazione o a eseguire una traccia. In questo caso io sospetto prima verrà eseguito il buffer.
Richiuso:dipende anche da;p Se qualcuno sta usando foreach
, allora sì:poiché foreach
elimina esplicitamente l'iteratore tramite finally
. Tuttavia! Non è garantito se qualcuno lo fa, ad esempio (molto cattivo e permissivo):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
quindi poiché l'iteratore non a:si elimina, b:si esaurisce e c:non si arresta in modo anomalo, non si spegnerà correttamente (qualsiasi di queste 3 condizioni si chiuderlo bene). Enfasi:questo è un caso patologico:normalmente è ragionevolmente sicuro dire "si chiuderà, sì".
Se vuoi garantire il non buffering, tieni presente che "dapper" lo ha, se imposti buffered
a false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(può anche gestire i parametri ecc.)