В случае выполнения базового запроса он может работать таким образом (конечно, это возможно) - однако, в случае запроса голого Table<T>
, он может будь то, что все это буферизует первым;Вы можете попробовать запросить счетчик во время итерации или запустить трассировку.В этом случае я подозреваю , что он сначала буферизуется.
Повторно закрыто: это также зависит; p Если кто-то использует foreach
, тогда да: поскольку foreach
явно выводит итератор черезfinally
.Тем не мение!Не гарантируется, если кто-то, например, (очень непослушный и слабый):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
тогда, так как итератор не a: получает распоряжение, b: исчерпывает себя, и c: не падает, он не отключится должным образом (любое из этих 3 условий будет правильно его закрывать).Подчеркивание: это патологический случай: обычно достаточно безопасно сказать «он закроется, да».
Если вы хотите гарантированную небуферизацию, учтите, что «dapper» имеет это, если вы установите buffered
до false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(он также может обрабатывать параметры и т. д.)