No caso de executar uma consulta básica, pode funciona dessa maneira (certamente é possível) - no entanto, no caso de consultar um
Table<T>
nu , pode seja que todos os buffers primeiro; talvez você possa tentar consultar a contagem durante a iteração ou executar um rastreamento. Neste caso eu suspeito ele irá armazenar em buffer primeiro. Re fechado:isso também depende;p Se alguém estiver usando
foreach
, então sim:desde foreach
descarta explicitamente o iterador via finally
. No entanto! Não é garantido se alguém fizer, por exemplo (muito travesso e negligente):var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
então, como o iterador não a:é descartado, b:se esgota e c:não trava, ele não será desligado corretamente (qualquer uma dessas 3 condições irá fechá-lo corretamente). Ênfase:este é um caso patológico:normalmente é razoavelmente seguro dizer "vai fechar, sim".
Se você deseja não buffering garantido, observe que "dapper" tem isso, se você definir
buffered
para false
:IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(também pode lidar com os parâmetros etc)