2009-07-13 30 views

Trả lời

6

Giả sử chúng ta đang nói LinqToObjects (rõ ràng là LinqToSql, LinqToWhatever có quy tắc riêng của chúng), đầu tiên sẽ chậm hơn một chút vì một trình lặp mới phải được tạo ra, nhưng rất khó có thể nhận thấy sự khác biệt. Xét về số lượng so sánh và số lượng vật phẩm được kiểm tra, thời gian mà hai vật phẩm cần thực hiện sẽ hầu như giống hệt nhau.

Trong trường hợp bạn đang lo lắng, điều gì sẽ không xảy ra là các nhà điều hành .Where lọc danh sách để n các mặt hàng và các .FirstOfDefault mất người đầu tiên ra khỏi danh sách được lọc. Cả hai trình tự sẽ ngắn mạch chính xác

0

Nếu chúng tôi giả định rằng trong cả hai trường hợp, bạn đang sử dụng các phương pháp Mở rộng do lớp Enumerable mở rộng cung cấp, thì bạn sẽ khó có thể đo được sự khác biệt giữa hai loại.

Hình thức còn ...

myCollection.Where(...).FirstOrDefault() 

... sẽ (kỹ thuật) sản xuất hoạt động bộ nhớ hơn (tạo ra một iterator trung gian để xử lý các khoản Where()) và liên quan đến nhiều một vài chu kỳ xử lý.

Điều này là các biến lặp này là lười biếng - mệnh đề Where() sẽ không vui vẻ thông qua toàn bộ danh sách đánh giá biến vị ngữ, nó sẽ chỉ kiểm tra xem có bao nhiêu mục cần thiết không.

Các vấn đề liên quan