Chúc mừng, tôi có câu hỏi sau đây. Tôi không tìm thấy câu trả lời chính xác cho nó, và nó thực sự thú vị với tôi. Giả sử tôi có đoạn mã sau để truy lục các bản ghi từ cơ sở dữ liệu (ví dụ để xuất nó ra tệp XML).LINQ có được đánh giá lười biếng không?
var result = from emps in dc.Employees
where emps.age > 21
select emps;
foreach (var emp in result) {
// Append this record in suitable format to the end of XML file
}
Giả sử có một triệu hồ sơ đáp ứng các nơi điều kiện trong các mã. Chuyện gì sẽ xảy ra? Tất cả dữ liệu này sẽ được lấy ra từ SQL Server ngay lập tức với bộ nhớ thời gian chạy khi nó đạt đến cấu trúc foreach hoặc nó sẽ được truy xuất sau đó cần thiết, bản ghi đầu tiên, thứ hai. Nói cách khác, LINQ có thực sự xử lý tình huống với việc lặp qua các bộ sưu tập lớn (xem post ở đây để biết chi tiết) không?
Nếu không, cách khắc phục sự cố bộ nhớ trong trường hợp đó? Nếu tôi thực sự cần phải đi qua bộ sưu tập lớn, tôi nên làm gì? Tính toán số lượng thực tế của các phần tử trong bộ sưu tập với sự trợ giúp của hàm Count, và sau đó đọc dữ liệu từ cơ sở dữ liệu bằng các phần nhỏ. Có cách nào dễ dàng để thực hiện phân trang với khung công tác LINQ không?
+1 Tôi sử dụng chức năng gần như giống hệt nhau để thực hiện việc này. – alex
Tôi không nghĩ rằng số truy cập nhiều hơn đến SQL Server sẽ là một vấn đề hiệu suất tuyệt vời, nếu chúng ta thiết lập kích thước trang một cách chính xác. Nó sẽ là khoảng 1000 hàng cho ví dụ của tôi tôi nghĩ, và khi ứng dụng sẽ chủ yếu bận rộn với xuất khẩu, không phải với truy vấn cơ sở dữ liệu. –
@ Spirit_1984 - Tôi đồng ý với bạn. Tôi sẽ có nhiều lượt truy cập vào SQL Server hơn là cố gắng tải hàng triệu hàng vào bộ nhớ. –