Trong khi làm việc trên một dự án, tôi chạy vào đoạn mã sau đây, đã nâng cờ hiệu suất.foreach loop Danh sách sự khác biệt hiệu suất
foreach (var sample in List.Where(x => !x.Value.Equals("Not Reviewed")))
{
//do other work here
count++;
}
tôi quyết định chạy một vài xét nghiệm nhanh chóng so sánh vòng lặp ban đầu cho vòng lặp sau:
foreach (var sample in List)
{
if (!sample.Value.Equals("Not Reviewed"))
{
//do other work here
count++;
}
}
và ném vòng lặp này trong quá để xem những gì sẽ xảy ra:
var tempList = List.Where(x => !x.Value.Equals("Not Reviewed"));
foreach (var sample in tempList)
{
//do other work here
count++;
}
Tôi cũng phổ biến danh sách gốc 3 cách khác nhau: 50-50 (vì vậy 50% giá trị trong đó "Không được đánh giá" và các giá trị còn lại khác), 10-90 và 90-10. Đây là kết quả của tôi, các vòng đầu tiên và cuối cùng là hầu như giống nhau nhưng cái thứ hai nhanh hơn nhiều, đặc biệt là trên trường hợp 10-90. Tại sao chính xác? Tôi luôn nghĩ rằng Lambda
có hiệu suất tốt.
EDIT
Các count++
không thực sự là những gì bên trong vòng lặp, tôi chỉ nói thêm rằng đây cho mục đích trình diễn, tôi đoán tôi nên đã sử dụng "// do something here"
EDIT 2
Kết quả chạy mỗi 1000 lần:
Sẽ rất thú vị khi xem cách 'List.Where (x =>! X.Value.Equals (" Not Reviewed ")). Count()' thực hiện so với những thứ đó. –
@MikePrecup: Hoặc thậm chí tốt hơn, 'List.Count (x =>! X.Value.Equals (" Not Reviewed "))' –
Bạn đã chắc chắn rằng bạn đã không thực hiện bất kỳ [sai số điểm chuẩn hiệu suất] nào (http: : //tech.pro/blog/1293/c-performance-benchmark-mistakes-part-one)? – Corak