Tôi có một phương pháp cung cấp trong Dal:Lợi nhuận hồ sơ cơ sở dữ liệu lợi nhuận sử dụng LINQToSql?
public IEnumerable<RecordType> GetRecords()
{
using (LinqDataContext context = new LinqDataContext())
{
var records = context.RecordTable;
foreach (RecordType record in records)
{
yield return record;
}
}
}
Phương pháp của người tiêu dùng sử dụng các bản ghi trong một vòng lặp foreach
. Bằng cách này tôi muốn tiết kiệm sử dụng bộ nhớ bằng cách không lưu trữ tất cả các bản ghi từ RecordTable
, vì LinqToSql sử dụng một DataReader phía sau khung cảnh.
Tôi có hai câu hỏi về tình huống này mặc dù:
Is that true rằng năng suất-trở về trên tiết kiệm nguồn lực và hoạt động nhanh hơn so với bộ nhớ đệm toàn bộ hồ sơ đến một mảng (.ToArray())?
sẽ kết nối dữ liệu được tự động đóng lại đúng cách (Ý tôi là báo cáo kết quả
using
) nếu một lỗi sẽ xảy ra bên trongforeach
vòng lặp của phương pháp tiêu thụ HOẶC nếu phương pháp tiêu thụ sẽ phá vỡforeach
vòng ở giữa (như tìm thấy một yêu cầu hồ sơ vàbreak
)?
Thực ra, 2 là "miễn là người gọi cư xử đúng cách" - nó không hoàn toàn là "được đảm bảo" vì hầu hết 'sử dụng' là –
@MarcGravell Tôi giả sử bạn đang nói về không (đúng) liệt kê toàn bộ Enumerable, hoặc tôi thiếu cái gì khác? –
có, di chuyển trình vòng lặp theo cách thủ công và thực hiện không chính xác. Nó không phải là một vấn đề khi sử dụng 'foreach', mà hầu hết mọi người sane sẽ sử dụng. –