Đây là một phép đo thời gian ngây thơ, chỉ để bổ sung câu trả lời của knittl.
Kết quả là phiên bản đánh giá DateTime.Now
mỗi lần vượt quá 10 lần chậm hơn so với mã của bạn.
Kết quả trên máy của tôi: T1: 8878 ms; T2: 589 mili giây. (Tối ưu hóa tối đa, không có trình sửa lỗi, v.v.).
class Program
{
static void Main(string[] args)
{
var things = new List<Something>();
var random = new Random(111);
for (int i = 0; i < 100000; ++i)
{
things.Add(new Something(random.Next(2010, 2016)));
}
// to avoid measuring the JIT compilation and optimization time
T1(things);
T2(things);
var sw = Stopwatch.StartNew();
for (int i = 0; i < 100; ++i)
{
T1(things);
}
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
for (int i = 0; i < 100; ++i)
{
T2(things);
}
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadLine();
}
private static void T1(List<Something> list)
{
var result = list.Where(x => x.ValidDate.Year == DateTime.Now.Year).ToList();
}
private static void T2(List<Something> list)
{
var yr = DateTime.Now.Year;
var result = list.Where(x => x.ValidDate.Year == yr).ToList();
}
}
class Something
{
public Something(int year)
{
this.ValidDate = new DateTime(year, 1, 1);
}
public DateTime ValidDate { get; private set; }
}
Hai đoạn mã này có ngữ nghĩa khác nhau. Nếu nó được chạy qua đêm trước năm mới và năm thay đổi giữa các hoạt động bạn sẽ nhận được kết quả khác nhau. Và cuối cùng - tôi giả sử - việc sử dụng mã đóng sẽ nhanh hơn, vì bạn không phải tạo các trường hợp 'DateTime' mới với mỗi vòng lặp lặp lại và bạn không phải truy cập hai thuộc tính bổ sung (giới thiệu một cấp độ khác của vô hướng). – knittl
@knittl trong câu hỏi ban đầu đã được đề cập trong phần bình luận. Nhưng đóng cửa được giới thiệu ở đâu? – Sascha
Vâng, thành thật không nên giải pháp với việc đóng cửa được nhanh hơn? (nó hoạt động khác nhau -> như 2 không tương đương). Nhưng nếu có gì thì nhanh hơn? –