Trong trường hợp thực hiện một truy vấn cơ bản, nó có thể hoạt động theo cách đó (chắc chắn là có thể) - tuy nhiên, trong trường hợp truy vấn một Table<T>
trần trụi , nó có thể là tất cả các bộ đệm đầu tiên; bạn có thể thử truy vấn số lượng trong quá trình lặp lại hoặc chạy theo dõi. Trong trường hợp này, tôi nghi ngờ nó sẽ đệm trước.
Đóng lại:điều đó cũng phụ thuộc; p Nếu ai đó đang sử dụng foreach
, sau đó có:kể từ foreach
loại bỏ trình lặp một cách rõ ràng qua finally
. Tuy nhiên! Nó không được đảm bảo nếu ai đó làm vậy, chẳng hạn (rất nghịch ngợm và lỏng lẻo):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
sau đó, vì trình lặp không a:get disposed, b:exposed, và c:không bị lỗi, nó sẽ không tắt đúng cách (bất kỳ điều kiện nào trong 3 điều kiện đó sẽ đóng nó đúng cách). Nhấn mạnh:đây là một trường hợp bệnh lý:thông thường có thể nói "nó sẽ đóng lại, có".
Nếu bạn muốn đảm bảo không lưu vào bộ đệm, hãy lưu ý rằng "dapper" có điều đó, nếu bạn đặt buffered
thành false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(nó cũng có thể xử lý các tham số, v.v.)