W przypadku wykonywania podstawowego zapytania może działaj w ten sposób (oczywiście jest to możliwe) - jednak w przypadku odpytywania nagiego Table<T>
, to może czy to wszystko najpierw buforuje; możesz spróbować zapytać o liczbę podczas iteracji lub uruchomić śledzenie. W tym przypadku podejrzewam najpierw będzie buforować.
Ponowne zamknięcie:to też zależy;p Jeśli ktoś używa foreach
, to tak:od foreach
jawnie usuwa iterator poprzez finally
. Jednakże! Nie jest to gwarantowane, jeśli ktoś to zrobi, na przykład (bardzo niegrzeczny i niedbały):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
to ponieważ iterator nie:a:zostaje usunięty, b:sam się wyczerpuje i c:nie ulega awarii, nie zostanie poprawnie zamknięty (dowolny z tych 3 warunków będzie zamknij go prawidłowo). Podkreślenie:jest to przypadek patologiczny:zwykle można rozsądnie powiedzieć „zamknie się, tak”.
Jeśli chcesz gwarantować brak buforowania, pamiętaj, że "dapper" ma to, jeśli ustawisz buffered
na false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(może również obsługiwać parametry itp.)