Tôi cần tính toán mức sử dụng CPU và RAM cho toàn bộ hệ thống cũng như cho một quy trình cụ thể. Tôi chưa bao giờ làm điều này trong C#. Vì vậy, tôi đã có thể đưa ra đoạn mã sau (mà tôi lấy chủ yếu từ các mẫu trên trang web này):Dữ liệu truy cập hiệu suất C# là "trên toàn bản đồ"
try
{
Process proc = Process.GetCurrentProcess();
string strProcName = proc.ProcessName;
Console.WriteLine("Process: " + strProcName);
using (PerformanceCounter total_cpu = new PerformanceCounter("Process", "% Processor Time", "_Total", true))
{
using (PerformanceCounter process_cpu = new PerformanceCounter("Process", "% Processor Time", strProcName, true))
{
for (; ;)
{
Console.CursorTop = 1;
Console.CursorLeft = 0;
float t = total_cpu.NextValue()/Environment.ProcessorCount;
float p = process_cpu.NextValue()/Environment.ProcessorCount;
Console.WriteLine(String.Format("Total CPU (%) = {0}\t\t\nApp CPU (%) = {1}\t\t\nApp RAM (KB) = {2}",
t, p, Process.GetCurrentProcess().WorkingSet64/(1024)
));
System.Threading.Thread.Sleep(100);
}
}
}
}
catch(Exception ex)
{
Console.WriteLine("Exception: " + ex);
}
Nhưng những gì nó mang lại cho tôi là dữ liệu "trên bản đồ". Hãy xem:
Vì vậy, ai đó có thể trả lời những điểm sau:
Nó có vẻ như chạy như vậy hiệu suất truy cập là một hoạt động khá tốn kém bởi chính nó - nó làm tăng mức sử dụng CPU khoảng 5%. Tôi đã làm một tấn của CPU quầy với C + + và họ mất khá nhiều không có thời gian CPU để chạy.
Bên cạnh những gì tôi đã nói ở trên, lần đầu tiên vòng lặp ở trên chạy với 2 giây trễ! Theo nghĩa đen, bị treo trong 2 giây. Nó có bình thường không? Nếu có, tôi không thể tin rằng họ có một sự táo bạo để gọi nó là bộ đếm hiệu suất :)
Mặc dù đọc RAM của tôi khá gần với báo cáo của Trình quản lý tác vụ, đầu ra CPU là hoàn toàn tắt. Ai đó có thể cho tôi biết tôi đang làm gì sai ở đây?
Hơn nữa, dường như tôi không tìm thấy bất kỳ tài liệu nào cho số PerformanceCounter class, có thể giải thích tất cả các tài liệu sau:
% Processor Time
,_Total
, v.v ...? Và quan trọng nhất, đó chỉ là tiếng Anh? Họ có phải được bản địa hóa không?Quy trình được chỉ định theo tên của nó. Nhưng nếu tôi có nhiều hơn một quá trình dưới cùng một tên đang chạy. Vậy thì sao?