En el caso de ejecutar una consulta básica, puede funciona de esa manera (ciertamente es posible); sin embargo, en el caso de consultar una Table<T>
desnuda , podría sea que todo se amortigua primero; tal vez podría intentar consultar el recuento durante la iteración o ejecutar un seguimiento. En este caso sospecho primero se almacenará en el búfer.
Re cerrado:eso también depende;p Si alguien está usando foreach
, entonces sí:desde foreach
elimina explícitamente el iterador a través de finally
. ¡Sin embargo! No está garantizado si alguien lo hace, por ejemplo (muy travieso y flojo):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
entonces, dado que el iterador no a:se elimina, b:se agota solo y c:no falla, no se cerrará correctamente (cualquiera de esas 3 condiciones lo hará cerrarlo correctamente). Énfasis:este es un caso patológico:normalmente es razonablemente seguro decir "se cerrará, sí".
Si desea garantizar el no almacenamiento en búfer, tenga en cuenta que "dapper" lo tiene, si configura buffered
a false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(también puede manejar los parámetros, etc.)