Dường như không có trình biên dịch hiệu suất .NET miễn phí nào có thể cấu hình trên cơ sở từng dòng. Do đó, tôi đang xem xét sử dụng Đồng hồ bấm giờ để lập hồ sơ.Lập hồ sơ các ứng dụng .NET với Đồng hồ bấm giờ
* miễn phí như tự do, tức là giấy phép bao gồm các ứng dụng thương mại.
EDIT: Để trả lời những người đã nói với tôi "mua một hồ sơ", tôi muốn, nhưng nếu tôi có thể chi tiêu nhiều tiền, tôi sẽ chi tiêu nó vào cái gì khác. Tôi đã cố gắng thuyết phục ông chủ của tôi rằng một hồ sơ có giá trị nó, nhưng không có nhiều may mắn. Câu hỏi này chủ yếu dựa trên sự tò mò. Tôi sẽ không bao giờ xem xét đồng hồ bấm giờ như một sự thay thế cho một hồ sơ thực sự.
Tôi có một ứng dụng thử nghiệm nhỏ (được viết bằng C#) để đo lường sự khác biệt về hiệu suất khi sử dụng Đồng hồ bấm giờ trên cơ sở mỗi dòng. Các mã kiểm tra là:
int n = 100;
BigInteger f = 1;
for (int i = n; i > 1; i--)
{
f *= i;
}
Đây là mã đầy đủ: http://pastebin.com/AvbQmT32
Tôi có một Stopwatch cho mỗi dòng mã. Đây là 'profiler' của tôi. Tôi cũng có một Đồng hồ bấm giờ cho toàn bộ chương trình. Đây là 'profiler profiler' của tôi.
Tôi có chương trình được định cấu hình là Chế độ phát hành, CPU bất kỳ (trên máy x64) và tối ưu hóa đã tắt.
Khi tôi chạy chương trình với các hồ sơ bị vô hiệu hóa, tôi nhận được một cái gì đó như thế này:
Line | Ticks
------------------------------|----------
|
Total time: | 359
Khi tôi chạy nó với các hồ sơ được kích hoạt, tôi nhận được một cái gì đó như thế này:
Line | Ticks
------------------------------|----------
|
int n = 100; | 3
BigInteger f = 1; | 12
for (int i = n; i > 1; i--) | 325
{ |
f *= i; | 539
} |
|
Total time: | 1710
Stopwatch overhead: | 831
Lý tưởng nhất , thời gian dành cho mã phải bằng nhau trong cả hai trường hợp, nhưng dường như Đồng hồ bấm giờ có chi phí xuất hiện trong thời gian đã trôi qua của riêng chúng.
Hiện tại, không cần thiết phải lập hồ sơ mọi dòng của chương trình vì nó thường hoạt động tốt hơn với cách tiếp cận phân chia và chinh phục. Bạn thường có thể bắt đầu bằng cách chia nhỏ các đoạn mã và thu hẹp bất kỳ vấn đề hiệu suất nào.
Ngoài ra, trong hầu hết các ứng dụng, dòng mã trung bình sẽ chậm hơn rất nhiều so với các dòng trong chương trình thử nghiệm. Điều này có nghĩa là sẽ có ít chi phí đồng hồ bấm giờ hơn.
Tuy nhiên, vẫn có phí khi sử dụng Đồng hồ bấm giờ, đặc biệt nếu bạn sử dụng nhiều.
Vì vậy, xuống đến câu hỏi:
Cách hiệu quả nhất để sử dụng Đồng hồ bấm giờ để lược tả là gì? Làm thế nào tôi có thể giảm thiểu chi phí? Thậm chí nó có đáng để quấn Đồng hồ bấm giờ xung quanh một tuyên bố đơn lẻ không?
Tôi đánh giá cao phản hồi của bạn.
Cá nhân, các hồ sơ tôi đã mua (ANTS Profiler) đáng giá từng xu. Tôi sẽ không bao giờ nghĩ đến việc "thủ công" một lần nữa. –
Xin lỗi vì đã hỏi, nhưng tại sao không đăng ký sử dụng một số lớp System.Diagnostics? Tôi tin rằng nó có chứa các lớp học để kiểm tra CPU và sử dụng Ram ví dụ. – Eon
Phiên bản miễn phí của Eqatec profiler cho phép sử dụng trong một dự án thương mại: http://www.eqatec.com/Profiler/LicenseTerms.aspx – ken2k