Rất nhiều trình thu thập dữ liệu giống như vậy. Những điều bạn cần biết không phải là trong đó chương trình dành thời gian của mình, nhưng lý do tại sao. Any references on Dynamic Code Analysis?
THÊM: Here's how Tôi tìm thấy "nút cổ chai" trong mã của mình. (Tôi ghét từ đó.) Here's a list lý do tại sao.
Hoàn toàn tự nhiên khi giả định rằng để tìm "nút cổ chai" bạn phải bằng cách nào đó thực hiện rất nhiều đo lường. Rất tự nhiên là gần như tất cả các trình biên dịch đều dựa trên nó.
Thực ra, việc tìm và đo không phải là vấn đề tương tự. Đo lường là cần thiết để xem nếu những gì bạn tìm thấy (và cố định) tạo sự khác biệt. Tìm thấy những gì để sửa chữa, với tôi, giống như gỡ lỗi hơn đo lường.
Cách đơn giản nhất để giải thích là bắt đầu từ vòng lặp vô hạn hoặc gần như vô hạn. Làm thế nào để bạn tìm thấy nó? Bạn tạm dừng nó và nhìn vào ngăn xếp, phải không? bởi vì bạn biết vấn đề ở đâu đó trên ngăn xếp. Bạn chỉ cần tạm dừng nó một lần, và sau đó bạn cần phải nghiên cứu mã trên ngăn xếp. Tạm dừng nó một vài lần nếu bạn muốn chắc chắn rằng bạn đã tìm thấy nó.
Giả sử mã chỉ mất gấp đôi thời gian cần thiết. Điều đó có nghĩa là khi bạn tạm dừng nó, có 50% cơ hội bạn sẽ thấy nó làm điều không cần thiết. Nếu bạn tạm dừng nó và nhìn vào nó 10 lần, bạn sẽ bắt nó trong hành động khoảng 5 lần. Trong thực tế, ngay sau khi bạn thấy nó làm một cái gì đó bạn có thể tối ưu hóa trên ít nhất là 2 mẫu, bạn đã tìm thấy một "nút cổ chai". Sửa chữa nó, đo tốc độ, hiển thị nó, và lặp lại.
Ngay cả khi vấn đề lớn nhất của bạn không phải là rất lớn, phương pháp này cuối cùng sẽ tìm thấy nó. Ngoài ra, có hiện tượng phóng đại, ở đó các vấn đề nhỏ trở nên dễ tìm hơn sau khi bạn đã xóa các vấn đề lớn hơn. Điều đó cho phép bạn tiếp tục cho đến khi mã gần như tối ưu.
P.S. Sau khi bạn đã thực hiện việc này, vẫn có thể có cơ hội để tăng tốc. Ví dụ, thuật toán tối ưu hóa có thể phụ thuộc vào sự ổn định số. Các kiến trúc hướng tin nhắn có thể làm cho việc theo dõi tại sao mã đang được thực hiện khó khăn hơn. Trong phần mềm thời gian thực, một vấn đề về hiệu suất chỉ thỉnh thoảng xảy ra và ít dễ lấy mẫu hơn. Điều này đòi hỏi sự thông minh hơn. Rơi xuống chỉ đo không làm điều đó.
Bạn có gặp những vấn đề tương tự mà tôi đã có trong [Có thể bỏ qua phương pháp không thích hợp khi profiling ruby applications?] (http://stackoverflow.com/questions/2241491/is-it-possible-to-ignore-irrelevant-methods-when-profiling-ruby-applications). Tôi đã tìm ra tùy chọn loại bỏ phương pháp của ruby-prof. –