Khá thường xuyên trên SO, tôi thấy mình tự đánh giá điểm chuẩn của các đoạn mã nhỏ để xem việc nhập nào là nhanh nhất.
Khá thường xuyên tôi thấy các nhận xét rằng mã điểm chuẩn không tính đến việc lắp ráp hoặc trình thu gom rác.
Tôi có chức năng đo điểm chuẩn đơn giản sau đây mà tôi đã phát triển từ từ:
static void Profile(string description, int iterations, Action func) {
// warm up
func();
// clean up
GC.Collect();
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
Sử dụng:
Profile("a descriptions", how_many_iterations_to_run, () =>
{
// ... code being profiled
});
Việc triển khai này có bất kỳ sai sót nào không? Nó có đủ tốt để chỉ ra rằng implementaion X nhanh hơn các lần lặp thực hiện Y qua Z không? Bạn có thể nghĩ ra cách nào để cải thiện điều này không?
CHỈNH SỬA Khá rõ ràng rằng phương pháp tiếp cận dựa trên thời gian (trái ngược với lặp lại), được ưa thích hơn, có ai có bất kỳ triển khai nào mà việc kiểm tra thời gian không ảnh hưởng đến hiệu suất không?