Như nhiều người đã lưu ý, lớp Đồng hồ bấm giờ chính xác cao được thiết kế để trả lời câu hỏi "mất bao lâu?" trong khi lớp DateTime được thiết kế để trả lời câu hỏi "khi nào thì Doctor Who bắt đầu?" Sử dụng các công cụ thích hợp cho công việc.
Tuy nhiên, có nhiều vấn đề về đo chính xác thời gian trôi qua hơn là chỉ cần nhận hẹn giờ đúng. Bạn cũng phải đảm bảo rằng bạn đang đo lường những gì bạn thực sự muốn đo lường.Ví dụ: xem xét:
// start the timer
M();
// stop the timer
// start another timer
M();
// stop the timer
Có sự khác biệt đáng kể nào giữa thời gian của hai cuộc gọi không? Có thể có. Hãy nhớ rằng, lần đầu tiên một phương thức được gọi là jitter phải biên dịch nó từ IL thành mã máy. Điều đó cần có thời gian. Cuộc gọi đầu tiên đến một phương thức có thể trong một số trường hợp nhiều hơn lần lâu hơn mọi cuộc gọi tiếp theo được đặt cùng nhau.
Vậy đo lường nào là "đúng"? Phép đo đầu tiên? Thư hai? Trung bình của họ? Tùy thuộc vào những gì bạn đang cố gắng tối ưu hóa cho. Nếu bạn đang tối ưu hóa cho khởi động nhanh thì bạn quan tâm rất nhiều về thời gian jit. Nếu bạn đang tối ưu hóa cho số trang giống nhau được phân phát mỗi giây trên máy chủ được khởi động thì bạn không quan tâm đến thời gian jit và nên thiết kế các thử nghiệm của mình để không phải là đo lường. Đảm bảo bạn đang đo lường điều bạn đang thực sự tối ưu hóa.
Nguồn
2010-09-07 21:09:53
Công cụ tốt nhất cho việc này là các công cụ hồ sơ thực sự như hồ sơ RedGate hoặc một công cụ có kèm theo một trong các phiên bản của studio trực quan. Vì thiếu điều đó, những gì Anthony nói sẽ là cược tốt nhất của bạn –
@George - Đối với các hoạt động lớn hoặc xem thời gian được chi tiêu có thể đúng, nhưng đối với đoạn mã ngắn, hãy xem cách nhanh nhất để làm điều gì đó 10.000 lần chẳng hạn ... profilers tích cực can thiệp và có lẽ không phải là cách tốt nhất để đi về việc có được kết quả chính xác. –
Đủ công bằng, tốt. –