2012-06-10 43 views
5

Mô hình kinh doanh của chúng tôi yêu cầu tính phí người dùng dựa trên số giờ sử dụng CPU.Tính toán sử dụng CPU

Ban đầu tôi đã nghĩ về việc chỉ đơn giản là sử dụng StopWatch và sau đó sử dụng thời gian trôi qua làm đơn vị đo lường. Nhưng vấn đề tôi thấy với cách tiếp cận này là vào thời điểm ngày 5000 người dùng đang truy cập vào máy chủ, thời gian trôi qua cho cùng một đoạn mã sẽ cao hơn vào ban đêm khi chỉ có 50 người dùng nhấn vào máy chủ.

Tùy chọn khác là tính phí người dùng dựa trên các lần lặp được thực hiện trên dữ liệu người dùng đã nhập. Có vài vấn đề với cách tiếp cận này.

  • Một số chức năng sẽ không yêu cầu bất kỳ sự lặp lại nào trên dữ liệu.
  • Mức sử dụng CPU cho x + y thấp hơn giá trị của x + y * z.

Cách tốt nhất để tính thông tin sử dụng CPU trong C# /. Net sao cho nó vẫn giữ nguyên cho tất cả người dùng cho cùng một hoạt động bất kể tải của máy chủ?

Có thể, tổng số hướng dẫn mức lắp ráp thực tế? Có cách nào để có được thông tin đó trong C# không?

Bạn có thể chia sẻ những đề xuất được tiếp cận nào khác?

Cảm ơn rất nhiều vì đã xem xét điều này.

Trả lời

14

Thực thi bất kỳ điều gì người dùng của bạn muốn chạy trong một process riêng và tìm kiếm CPU time sau khi quá trình hoàn tất. Điều này cũng khác với thời gian xung quanh khi nó chỉ tính đến thời gian quá trình thực sự chạy trên CPU.

dụ tối thiểu đối với những người không muốn đọc tài liệu:

ProcessStartInfo psi = new ProcessStartInfo(@"C:\Blah\Foo.exe"); 
Process p = Process.Start(psi); 
p.WaitForExit(); 
TimeSpan time = p.TotalProcessorTime; 
p.Close(); 

Bạn có thể muốn chạy này không đồng bộ, mặc dù.

Không cần ước tính, đoán hoặc ma thuật đen. Bạn không thể tính toán nó một cách đáng tin cậy.

+2

Bạn có thể chia sẻ một số ví dụ về việc thực thi mã trong quy trình riêng và nhận thời gian CPU của nó không? – Moon

+0

+1 cho "đối với những người không muốn đọc tài liệu" (cũng như để có câu trả lời đúng :-)) – phoog

+0

BTW, điều gì sẽ xảy ra nếu tôi muốn theo dõi việc sử dụng chỉ một chức năng? Tôi có thể bọc mã đó bên trong một exe. Nhưng có cách nào tốt hơn không? Nếu hàm thực hiện một số tác vụ khác trong chuỗi nền, chúng sẽ là một phần của cùng một quá trình và sẽ tác động đến 'TotalProcessTime'? – Moon