Các AverageTimer32/64 không tính toán tỷ lệ trung bình của tất cả các phép đo bạn thực hiện. Thay vào đó, nó cung cấp khẩu phần đo lường của bạn cho số lượng hoạt động bạn đã đo.
Về cơ bản, vấn đề với mã của bạn là thực tế bạn đang sử dụng bộ hẹn giờ mới mỗi lần bạn thực hiện phép đo.
Để hiểu cách trình hoạt động của AverageTimer, có thể hữu ích khi hiểu công thức đằng sau nó. Điều này cũng giải đáp tại sao người ta cần một AverageBase để sử dụng một AverageTimer.
Công thức cho AverageTimer là như sau:
((N1 - N0)/F)/(B1 - B0)
với
- N1 đọc hiện tại thời điểm t (AverageTimer)
- N0 đọc trước đó, tại t - 1 (AverageTimer)
- Bộ đếm dòng B1 tại t (AverageBase)
- B0 truy cập trước, tại t - 1 (Cơ sở trung bình)
- F Yếu tố để tính toán ve/giây
Tóm lại các công thức mất thời gian hiện tại trong tích tắc và trừ trước đó. Kết quả chia cho hệ số F cho bạn thời gian bạn vận hành chạy kể từ lần đo cuối cùng được thực hiện tại t-1.
Bây giờ bạn chia số này cho bộ đếm hiện tại trừ đi bộ đếm trước đó. Điều này có thể thường là một. Kết quả là bạn có thời gian hoạt động trung bình cho một phép đo.
Sử dụng AverageBase bây giờ bạn có thể vượt qua các điểm đo khác nhau. Hãy nghĩ về một trường hợp mà bạn có thể đặt bộ đếm chỉ mỗi hoạt động thứ mười mà bạn thực hiện. Vì phép đo cuối cùng của bạn, bạn sẽ tăng Bộ thu thập trung bình bằng phép đo thời gian mới cho tất cả mười phép toán nhưng tăng số lượng AverageBase lên 10. Cuối cùng, bạn sẽ nhận được thời gian trung bình cho một hoạt động (ngay cả khi bạn đã đo trên tất cả mười cuộc gọi hoạt động).
Nhìn vào ví dụ mã bạn gửi luôn là sự khác biệt từ bộ đếm thời gian bắt đầu đến giờ kết thúc. Hãy để đây là một loạt các con số như 10, 9, 8, 7, 6 trong khi tăng AverageBase lên 1.
Đối với việc đo lường thứ hai bạn biết sẽ nhận được kết quả sau:
(9-10)/F/(10) = -1/F/1
Với F là 1 vì đơn giản bạn sẽ nhận được -1 là kết quả.
Các giá trị đúng để nộp tuy nhiên nên
10, 19, 27, 34, 40
Một lần nữa ví dụ tương tự, chúng tôi sẽ nhận được
(19 - 10)/F/(1 - 0) = 9/F/1
Một lần nữa, với F là 1 bạn sẽ có thời gian trung bình là 9 cho hoạt động của bạn. Như bạn có thể thấy, giá trị tiếp theo được đo cần phải lớn hơn giá trị trước đó để AverageTimer hoạt động chính xác.
Trong ví dụ của bạn, bạn có thể sử dụng Đồng hồ bấm giờ toàn cầu. Thay vì bắt đầu nó mới, sử dụng Start() (không khởi động lại()). Như đã thấy ở trên, bộ đếm sẽ tính toán sự khác biệt về thời gian trong nội bộ. Bằng cách đó bạn sẽ nhận được các phép đo chính xác.
Đi tới số 0 cũng có ý nghĩa, khi bạn đã hoàn thành thử nghiệm hoặc chương trình của bạn kết thúc, bộ đếm có thể sẽ bị đóng và không cung cấp bất kỳ giá trị nào nữa. Bạn có thể thực hiện thủ công bằng cách gọi phương thức Close() trên bộ đếm.
Socrates: mức tăng trung bình là bao nhiêu? –
Xin lỗi tôi đã không nhận được câu hỏi đó. Có lẽ tôi đang sử dụng truy cập sai? Tôi đã cập nhật mã ban đầu với yêu cầu tôi có. –
Đây là thời gian trung bình trong suốt thời gian kể từ lần đo cuối cùng. Nếu bạn không đăng nhập bất cứ điều gì nó sẽ trở thành số không như thời gian trung bình là không xác định (đơn giản hóa bằng không). – Guvante