Tôi hiểu rằng thực hiện các hoạt động trong đơn đặt hàng khác nhau sẽ mang lại hiệu suất khác nhau như sự khác biệt giữa các truy vấn chậm sau:Thứ tự của vị từ quan trọng khi sử dụng LINQ?
List<TestItem> slowResults = items.OrderBy(item => item.StringItem)
.Where(item => item.IntItem == 100)
.ToList();
và nhanh hơn này một:
List<TestItem> fastResults = items.Where(item => item.IntItem == 100)
.OrderBy(item => item.StringItem)
.ToList();
Nhưng đó không phải là của tôi câu hỏi:
Câu hỏi của tôi là về hiệu suất của mạch ngắn vì nó rela tes đến một vị từ LINQ. Khi tôi sử dụng mệnh đề Where, như trong trường hợp này:
List<TestItem> results = items.Where(item => item.Item1 == 12 &&
item.Item2 != null &&
item.Item2.SubItem == 65 &&
item.Item3.Equals(anotherThingy))
.ToList();
Thứ tự của đối số không quan trọng? Ví dụ, tôi mong đợi rằng làm một .Equals đầu tiên sẽ dẫn đến một truy vấn chậm hơn tổng thể do việc đánh giá số nguyên Item1 == 12 là một hoạt động nhanh hơn nhiều?
Nếu đơn đặt hàng quan trọng, giá trị của nó là bao nhiêu? Tất nhiên, các phương thức gọi như .Equals có lẽ là kết quả chậm hơn nhiều so với nếu tôi chỉ so sánh một vài số nguyên, nhưng nó có phải là một hình phạt hiệu suất tương đối nhỏ so với LINQ hoạt động chậm hay không? Như LINQ làm cho tấn của các cuộc gọi phương thức, là một cái gì đó như .Equals thực sự sẽ quan trọng kể từ khi - trừ khi nó ghi đè - nó sẽ được thực hiện mã khuôn khổ bản địa, phải không? Mặt khác, một cuộc gọi phương thức MSIL tiêu chuẩn sẽ chậm hơn đáng kể?
Ngoài ra, có bất kỳ tối ưu hóa trình biên dịch nào khác trên truy vấn này có thể tăng tốc độ này dưới mui xe không?
Cảm ơn những suy nghĩ và làm rõ! Brett
LINQ cho những gì? – SLaks
Tôi đã suy nghĩ LINQ to Objects, nhưng tôi cho rằng câu hỏi thậm chí còn quan trọng hơn đối với LINQ to SQL. – Brett
Mặc dù tôi không biết LINQ____, nếu nó giống như các ngôn ngữ ngắn mạch khác, thứ tự quan trọng, bởi vì nếu biểu thức được đánh giá bao giờ trở thành đúng hoặc chắc chắn sai, phần còn lại của các biến vị ngữ có thể được loại bỏ một cách an toàn. Ví dụ, trong biểu thức '(1 == 1 || x == 3)', 'x == 3' sẽ không bao giờ được đánh giá bởi vì bất kể kết quả là gì, biểu thức sẽ đúng. Một ví dụ đơn giản tương tự có thể là '(1 == 0 && x == 3)', trong đó sau khi '1 == 0' được tìm thấy là sai, nó chỉ thoát vì không có cách nào biểu thức có thể đúng. Xin lỗi nếu đây không phải là những gì bạn đang tìm kiếm! – prelic