Câu 1: Bạn đang sử dụng công cụ nào để lập hồ sơ mã (lược tả, không phải điểm chuẩn)?
Câu 2: Bạn để mã chạy trong bao lâu (thống kê: bao nhiêu bước thời gian)?
Câu 3: Các trường hợp lớn đến mức nào (nếu trường hợp vừa trong bộ đệm, bộ giải là các đơn đặt hàng có cường độ nhanh hơn, nhưng sau đó tôi sẽ bỏ lỡ các quy trình liên quan đến bộ nhớ)?
Đây là một ví dụ về cách tôi làm điều đó.
Tôi tách điểm chuẩn (xem mất bao lâu) từ hồ sơ (xác định cách làm cho nhanh hơn). Điều quan trọng không phải là trình hồ sơ nhanh. Điều quan trọng là nó cho bạn biết những gì cần sửa chữa.
Tôi thậm chí không thích từ "profiling" bởi vì nó gợi ra một hình ảnh giống như biểu đồ, trong đó có một thanh chi phí cho mỗi thói quen, hoặc "nút cổ chai" bởi vì nó chỉ có một vị trí nhỏ trong mã cần phải có đã sửa. Cả hai điều này đều ngụ ý một số loại thời gian và số liệu thống kê mà bạn cho rằng độ chính xác là quan trọng. Nó không đáng để từ bỏ cái nhìn sâu sắc về tính chính xác của thời gian.
Phương pháp tôi sử dụng là tạm dừng ngẫu nhiên, và có một nghiên cứu tình huống và trình chiếu đầy đủ ở đây . Một phần của quan điểm thế giới tắc nghẽn hồ sơ là nếu bạn không tìm thấy gì, sẽ không tìm thấy gì, và nếu bạn tìm thấy thứ gì đó và tăng tốc phần trăm nhất định, bạn tuyên bố chiến thắng và bỏ cuộc. Người hâm mộ Profiler hầu như không bao giờ nói họ tăng tốc bao nhiêu và quảng cáo chỉ hiển thị các vấn đề giả tạo được thiết kế để dễ tìm. Tạm dừng ngẫu nhiên tìm thấy các vấn đề cho dù chúng dễ hay khó. Sau đó, sửa một vấn đề làm lộ ra những vấn đề khác, vì vậy quá trình có thể được lặp lại, để có được sự tăng tốc gộp.
Theo kinh nghiệm của tôi từ nhiều ví dụ, đây là cách nó diễn ra: Tôi có thể tìm thấy một vấn đề (bằng cách tạm dừng ngẫu nhiên) và khắc phục nó, tăng tốc một số phần trăm, giả sử 30% hoặc 1,3 lần. Sau đó, tôi có thể làm lại, tìm một vấn đề khác và khắc phục nó, tăng tốc độ khác, có thể ít hơn 30%, có thể nhiều hơn. Sau đó, tôi có thể làm lại, nhiều lần cho đến khi tôi thực sự không thể tìm thấy gì khác để khắc phục. Yếu tố tăng tốc cuối cùng là sản phẩm chạy của các yếu tố riêng lẻ, và nó có thể lớn đến mức đáng kinh ngạc - các đơn đặt hàng cường độ trong một số trường hợp.
XÁC NHẬN: Chỉ để minh họa điểm cuối cùng này. Có một ví dụ chi tiết ở đây , với trình chiếu và tất cả các tệp, cho thấy mức tăng tốc của 730x đã đạt được trong một loạt các vấn đề loại bỏ. Phiên bản đầu tiên mất 2700 micro giây trên mỗi đơn vị công việc. Vấn đề A đã được gỡ bỏ, đưa thời gian xuống còn 1800 và phóng đại tỷ lệ phần trăm của các vấn đề còn lại lên gấp 1,5 lần (2700/1800). Sau đó B được gỡ bỏ. Quá trình này tiếp tục qua sáu lần lặp lại, dẫn đến gần 3 bậc tăng tốc độ. Nhưng kỹ thuật định hình phải thực sự hiệu quả, bởi vì nếu không tìm thấy bất kỳ vấn đề nào trong số đó, tức là nếu bạn đạt đến điểm mà bạn nghĩ không chính xác thì không thể làm gì hơn nữa, quy trình bị đình trệ.
XÁC NHẬN: Để nói theo một cách khác, đây là một biểu đồ về tổng yếu tố tăng tốc khi các vấn đề liên tiếp được loại bỏ:
Vì vậy, đối với Q1, đối với điểm chuẩn, bộ đếm thời gian đơn giản đủ. Để "định hình" tôi sử dụng tạm dừng ngẫu nhiên.
Câu 2: Tôi cho nó đủ khối lượng công việc (hoặc chỉ đặt một vòng lặp xung quanh nó) để nó chạy đủ lâu để tạm dừng.
Câu 3: Bằng mọi cách, hãy cung cấp cho nó khối lượng công việc thực tế lớn để bạn không bỏ lỡ các vấn đề về bộ đệm. Những cái đó sẽ hiển thị dưới dạng các mẫu trong mã thực hiện tìm nạp bộ nhớ.