2013-04-24 36 views
8

Tôi đang viết chương trình sử dụng bộ đếm hiệu suất .NET để sử dụng CPU, Bộ nhớ và Mạng cho một quy trình cụ thể.Giám sát hiệu suất mạng cho một quy trình cụ thể

Ví dụ, để có được những CPU và bộ nhớ dữ liệu cho Explorer, tôi có thể tạo bộ đếm hiệu suất như thế này:

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "% Processor Time"; 
PC.InstanceName = "Explorer"; 

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "Process"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = "Explorer"; 

Thật không may, không có tài sản để quá trình categoryName cho phép tôi để có được sử dụng mạng cho rằng quá trình. Tôi có thể sử dụng Giao diện mạng categoryName để sử dụng mạng tổng thể trên bất kỳ NIC cụ thể nào, nhưng không thể tách biệt nó với bất kỳ Quy trình cụ thể nào.

+0

có vẻ như có điều gì đó tương tự được hỏi trước đây: http: //stackoverflow.com/questions/438240/monitor-a-processs-network-usage – Dilshod

+2

Đây là một hạn chế về kiến ​​trúc. Các bộ đếm này được thực hiện bởi ngăn xếp trình điều khiển mạng. Mà chạy trong chế độ hạt nhân, nó không có nhận thức quá trình usermode. Cùng một loại lý do tại sao FileSystemWatcher không thể cho bạn biết quy trình nào đã sửa đổi một tệp. –

Trả lời

0

Tôi cho rằng bạn chỉ có thể sử dụng mạng cho toàn bộ hệ thống. Bạn có thể sử dụng mã này:

GetCounterValue(_netRecvCounters[index], "Network Interface", "Bytes Received/sec",  _instanceNames[index]): 

double GetCounterValue(PerformanceCounter pc, string categoryName, string counterName, string instanceName) 
{ 
    pc.CategoryName = categoryName; 
    pc.CounterName = counterName; 
    pc.InstanceName = instanceName; 
    return pc.NextValue(); 
} 

Với PerformanceCounters, bạn chỉ có thể nhận được các giá trị mà Microsoft muốn bạn có quyền truy cập.

Các vấn đề liên quan