Từ kinh nghiệm cá nhân, System.Diagnostics.Stopwatch
lớp có thể được sử dụng để đo thời gian thực hiện của một phương thức, tuy nhiên, THƯỞNG : Nó không hoàn toàn chính xác!
Hãy xem xét ví dụ sau:
Stopwatch sw;
for(int index = 0; index < 10; index++)
{
sw = Stopwatch.StartNew();
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
Kết quả ví dụ
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
Bây giờ bạn đang tự hỏi; "tại sao lần đầu tiên nó lại mất 132ms và ít hơn đáng kể thời gian còn lại?"
Câu trả lời là Stopwatch
không bù cho hoạt động "nhiễu nền" trong .NET, chẳng hạn như JITing. Do đó, lần đầu tiên bạn chạy phương thức của mình, .NET JIT là phương thức đầu tiên. Thời gian cần thiết để làm điều này được thêm vào thời gian thực hiện. Tương tự, các yếu tố khác cũng sẽ khiến thời gian thực hiện thay đổi.
Điều bạn thực sự cần tìm kiếm cho độ chính xác tuyệt đối là Hồ sơ hiệu suất !
Hãy xem những điều sau đây:
RedGate ANTS Performance Profiler là một sản phẩm thương mại, nhưng cho kết quả rất chính xác. - Tăng hiệu suất của các ứng dụng của bạn với .NET profiling
Dưới đây là một bài viết StackOverflow về hồ sơ: - Một số trình biên dịch .NET tốt là gì?
Tôi cũng đã viết một bài viết về Hồ sơ hiệu suất bằng cách sử dụng Đồng hồ bấm giờ mà bạn có thể muốn xem - Cấu hình hiệu suất trong .NET
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
bên trong, nhưng đồng hồ bấm giờ dừng lại trước khi mọi thứ được thực hiện.