2013-04-10 33 views
5

Một đồng nghiệp và tôi đã xem qua báo cáo Visual Studio Profiling trong VS2012 và họ hỏi tôi, "Tại sao bạn sử dụng tỷ lệ phần trăm để biểu thị thời gian trong một phương pháp hoặc thời gian dành cho phương pháp?"Trong phần mềm lược tả, tại sao tỷ lệ phần trăm được sử dụng thay vì thời gian bằng mili giây?

Giải thích của tôi là công cụ đang cung cấp một số đại diện về phương pháp/cuộc gọi nào mất một thời gian dài hoặc những phần nào của phương pháp mất nhiều thời gian. Bây giờ có thể là một trừu tượng (phần trăm) hoặc một cái gì đó tuyệt đối (thời gian (ms)), nhưng hoặc là đủ để chỉ cho bạn các lĩnh vực vấn đề trong ứng dụng của bạn.

Chúng tôi đặc biệt không bị thuyết phục bởi điều đó, vì vậy tôi nghĩ mình nên hỏi internet.

Trả lời

1

Thời gian tính bằng mili giây sẽ thay đổi dựa trên nhiều yếu tố - máy phát triển của bạn có thể có bốn bộ xử lý và 32GB RAM - nhưng máy người dùng chỉ có thể là lõi đơn và RAM 1GB.

gì sẽ phù hợp (chủ yếu là) là "các bit mà đi dài nhất" - vì vậy tỷ lệ giúp bạn xác định những phần chậm nhất của mã của bạn, đó là những phần bạn có thể đạt được nhiều thời gian nhất lại từ bằng cách tối ưu hóa.

bất kể trình biên dịch có thể tối ưu hóa mã dựa trên bộ xử lý như thế nào.

2

Thực ra, một số trình tạo hồ sơ cung cấp thời gian tuyệt đối ngoài phần trăm.

Câu hỏi thực tế là thời gian hữu ích này là, xem xét thực tế là bạn có thể nhận được thời gian khác nhau tùy thuộc vào những thứ như tải máy hiện tại và thông số kỹ thuật của máy hiện tại. Ngoài ra, hãy nhớ rằng khi bạn chạy mã trong một hồ sơ nó sẽ chạy chậm hơn so với chạy không được định sẵn, vì vậy thậm chí chạy cấu hình không phản ánh chính xác thời gian chạy thực sự.

Vì những lý do này, một số có thể coi thời gian tuyệt đối không liên quan. Nếu sau đó bạn giả định rằng những thay đổi giữa các thời gian bằng một phép nhân bằng một số, phần trăm sẽ là số lượng để xem xét. Tỷ lệ phần trăm sau đó sẽ bảo tồn tỷ lệ giữa thời gian tuyệt đối, vì vậy nếu một cái gì đó mất hai lần thời gian, nó sẽ có hai lần tỷ lệ phần trăm.

Tất nhiên tỷ lệ phần trăm không hoàn hảo, vì không đảm bảo rằng các thay đổi sẽ được nhân (ví dụ, chi phí, sẽ là phụ gia).

2

Mục tiêu là gì?

  1. Chỉ nhận các phép đo thời gian bạn có thể đặt trên một điểm mạnh? hoặc ...

  2. Tìm hiểu cách làm cho toàn bộ điều mất ít hơn thời gian? (Khác với việc chạy nó trên một con chip nhanh hơn.)

Nếu mục tiêu là (2), điều cần làm là tìm các hoạt động trong phần mềm mà a) chiếm một tỷ lệ lớn đồng hồ treo tường thời gian, và b) là không cần thiết. Lý do là nếu bạn có thể loại bỏ hoạt động lấy phần X (khoảng 50%) thời gian, thì hệ số tăng tốc bạn nhận được lên đến 1/(1-X) hoặc hai lần.

Tôi đang cẩn thận sử dụng từ "hoạt động" ở đây, vì đó là một khái niệm rất chung chung. Nếu bạn chỉ nghĩ rằng bạn đang tìm kiếm "các thói quen chậm", bạn sẽ bỏ lỡ cơ hội tăng tốc lớn và đó là những gì bạn không thể làm, nếu bạn thực sự quan tâm đến hiệu suất.

Điểm mấu chốt là cơ hội tăng tốc giống như đá. Họ đến trong bội số, và trong một loạt các kích cỡ. Nếu bạn không xóa mỗi một trong số họ bạn sẽ sống với những thứ bạn không nhận được. Ví dụ, nếu có ba trong số họ, và khi loại bỏ họ tiết kiệm 50%, 25%, và 12,5%, sau đó nếu bạn làm cả ba bạn nhận được một tăng tốc 8x. Khá tốt. Nhưng, nếu bạn bỏ lỡ một người trong số họ, bạn không nhận được bất cứ nơi nào gần đó.

Hồ sơ được coi là người tìm nhạc rock, nhưng nếu họ bỏ lỡ, bạn sẽ biết như thế nào? Nếu đầu ra của profiler là ấn tượng, nhưng dường như không gợi ý bạn thực sự có thể sửa chữa, có nghĩa là không có gì? Không. More on all that.

7

Đây là Andre Hamilton từ nhóm Visual Studio Profiler. Lý do các giá trị theo tỷ lệ phần trăm và không phải trong ms là bởi vì bạn đang nhìn thấy một báo cáo dựa trên Hồ sơ mẫu và không phải là hồ sơ dựa trên Công cụ.

Mẫu hồ sơ Về cơ bản, Hệ điều hành sẽ định kỳ thực hiện việc đi bộ ngăn xếp. Các kết quả mà bạn thấy trong báo cáo lược tả đại diện cho phần nào của thời gian khi hệ điều hành thực hiện một lượt đi bộ mà một chức năng cụ thể đã có trên ngăn xếp

Profiling Instrument Về cơ bản chúng tôi sửa đổi nhị phân (tĩnh hoặc động) và chặn bắt đầu và kết thúc các chức năng. Sau đó, chúng tôi lấy dấu thời gian khi chúng tôi bắt đầu và thoát khỏi chức năng. Điều này sẽ cung cấp cho bạn thông tin chính xác về các chức năng thực hiện, nhưng nó không đến mà không có chi phí. Bởi vì thông tin được thực hiện ở mọi chức năng, hãy nhập lối ra &, báo cáo định hình kết quả có thể rất lớn (không phải là không rõ ràng để có hơn 1GB dữ liệu chỉ với vài giây thực thi chương trình). Ngoài ra nếu thiết bị đo tĩnh được sử dụng trên các tệp nhị phân đã ký, bạn sẽ cần phải yêu cầu chúng từ chức. Điều này có thể làm phức tạp quá trình phát triển. Thiết bị động giúp ích ở đây, nhưng điều này không giúp bạn tiết kiệm chi phí dữ liệu. Trừ khi bạn đang tìm kiếm thông tin thời gian cụ thể Lấy mẫu thực sự là cách để đi như thể hiện b các áp phích khác.

FYI Visual Studio đi kèm với vsinstr cho thiết bị đo tĩnh (được tìm thấy trong \ Team Tools \ Performance Tools).

+0

Là hồ sơ tập thể dục ứng dụng Cửa hàng JavaScript của Windows cũng như ứng dụng C#. Bạn sẽ nhận thấy rằng các JavaScript bao gồm thông tin về ms, đó là vì việc lược tả JavaScript trong VS2012 được thực hiện thông qua thiết bị đo đạc, trong khi các ứng dụng Managed Windows Store được lấy mẫu –

0

Tỷ lệ phần trăm là tốt. Nhưng cần có thời gian tính bằng mili giây. Nếu bạn phải so sánh hai phiên bản phần mềm làm cùng một tác vụ, một phiên bản mất nhiều thời gian hơn công việc kia. Tỷ lệ phần trăm khó so sánh hơn so với thời gian tuyệt đối dành cho mỗi chức năng. Tại sao không cho chúng ta lựa chọn nhìn thấy tỷ lệ phần trăm của thời gian tuyệt đối?

Tôi rất ngạc nhiên vì điều này chưa được đưa ra.