2011-01-13 37 views
51

Làm cách nào để có được CPUSử dụng bộ nhớ của một quá trình cụ thể bằng cách sử dụng lớp .NET PerformanceCounter? Và sự khác nhau giữaBộ đếm hiệu suất chính xác để nhận CPU và sử dụng bộ nhớ của một quy trình là gì?

Processor\% Processor TimeProcess\% Processor Time là gì?

Tôi hơi bối rối giữa hai điều này.

+3

Không có một cách chính xác để đo lường sử dụng bộ nhớ. Bộ nhớ có thể được sử dụng theo nhiều cách khác nhau. Ví dụ, bạn có tính bộ nhớ hoán đổi vào đĩa hoặc bộ nhớ chỉ được dành riêng/cam kết nhưng chưa được ghi, ... – CodesInChaos

Trả lời

91

Từ this bài:

Để có được toàn bộ PC CPU và bộ nhớ sử dụng:

using System.Diagnostics; 

Sau đó, tuyên bố trên toàn cầu:

private PerformanceCounter theCPUCounter = 
    new PerformanceCounter("Processor", "% Processor Time", "_Total"); 

Sau đó, để có được thời gian CPU, đơn giản gọi phương thức NextValue():

this.theCPUCounter.NextValue(); 

Điều này sẽ giúp bạn có được sử dụng CPU

Đối với việc sử dụng bộ nhớ, điều tương tự áp dụng Tôi tin rằng:

private PerformanceCounter theMemCounter = 
    new PerformanceCounter("Memory", "Available MBytes"); 

Sau đó, để có được sử dụng bộ nhớ, chỉ cần gọi NextValue() phương pháp:

this.theMemCounter.NextValue(); 

Để biết quy trình cụ thể về CPU và Sử dụng bộ nhớ:

private PerformanceCounter theCPUCounter = 
    new PerformanceCounter("Process", "% Processor Time",    
    Process.GetCurrentProcess().ProcessName); 

trong đó Process.GetCurrentProcess().ProcessName là tên quá trình bạn muốn nhận thông tin.

private PerformanceCounter theMemCounter = 
    new PerformanceCounter("Process", "Working Set", 
    Process.GetCurrentProcess().ProcessName); 

nơi tên quy trình bạn muốn nhận thông tin.

Lưu ý rằng Working Set có thể không đủ theo đúng nghĩa của nó để xác định dấu vết quá trình bộ nhớ - xem What is private bytes, virtual bytes, working set?

Để lấy tất cả các hạng mục, thấy Walkthrough: Retrieving Categories and Counters

Sự khác biệt giữa Processor\% Processor TimeProcess\% Processor TimeProcessor là từ chính PC và Process là cho mỗi quá trình riêng lẻ. Vì vậy, thời gian xử lý của bộ vi xử lý sẽ được sử dụng trên PC. Thời gian xử lý của một quá trình sẽ là quá trình sử dụng quy định. Đối với mô tả đầy đủ tên loại: Performance Monitor Counters

Một thay thế cho việc sử dụng Counter Performance

Sử dụng System.Diagnostics.Process.TotalProcessorTimeSystem.Diagnostics.ProcessThread.TotalProcessorTime tính để tính toán sử dụng bộ vi xử lý của bạn như article này mô tả.

+1

Nhưng nó sẽ cho phép sử dụng CPU/Mem của quá trình hiện tại mà chức năng được gọi? –

+0

Cách sử dụng bộ nhớ không phải là bộ nhớ khả dụng. Làm thế nào để có được các Megabyte được sử dụng, không có sẵn? –

+1

Nếu tôi tạoCPUCounter như trên, tôi nhận được InvalidOPerationException: "Không thể tải dữ liệu Tên truy cập vì chỉ mục không hợp lệ '' đã được đọc từ sổ đăng ký". – Ted

3

Pelo Hyper-V:

private PerformanceCounter theMemCounter = new PerformanceCounter(
    "Hyper-v Dynamic Memory VM", 
    "Physical Memory", 
    Process.GetCurrentProcess().ProcessName); 
Các vấn đề liên quan