2011-07-04 21 views
9

Tôi đang cố đọc một số bộ đếm hiệu suất từ ​​ứng dụng .NET 4 đang chạy, từ ứng dụng .NET 4 khác.Đọc hiệu suất truy cập từ C#: Ví dụ không tồn tại trong danh mục được chỉ định

Một số bộ đếm, chẳng hạn như Process\% Processor TimeProcess\Private Bytes hoạt động tốt. Tuy nhiên, ngay sau khi tôi cố gắng đọc một hiệu suất truy cập từ một trong các loại .NET, chẳng hạn như .NET CLR Memory\# Gen 0 Collections, tôi nhận được ngoại lệ sau đây:

Instance 'MyApplication' does not exist in the specified Category 

Khi tôi gọi:

new PerformanceCounterCategory(".NET CLR Memory").GetInstanceNames() 

Nó trả về một tập hợp rất nhỏ các trường hợp và MyApplication thực sự không có trong danh sách. Tuy nhiên, khi tôi nhìn vào quầy hiệu suất của tôi trong perfmon, danh sách các trường hợp tôi thấy có cùng danh mục/bộ đếm dài hơn nhiều và DOES bao gồm MyApplication.

Có ai biết tại sao bộ đếm .NET không hiển thị với ứng dụng của tôi không?

(Lưu ý: Ứng dụng được giám sát là bắt đầu bởi ứng dụng giám sát, vì vậy chúng chắc chắn chạy trong cùng một tài khoản người dùng. Tôi cũng đã thử bắt đầu ứng dụng giám sát của mình với tư cách Quản trị viên và thêm tài khoản của tôi vào nhóm Người dùng Màn hình hiệu suất. không có hiệu lực.)

+0

http://stackoverflow.com/questions/5832709/exception-instance-name-of-instance-does-not-exist-in-the-specified-category –

+0

Không phải vấn đề; Chỉ có 1 cá thể, có và không có cấu hình XML nó không hoạt động, và trong mọi trường hợp, các bộ đếm hoạt động đúng trong perfmon. – rix0rrr

+0

Tôi chỉ nhận được '" ConsoleApplication2 "' khi tôi chạy tệp thực thi được tạo thực tế. Tôi không nhận được nó khi tôi chạy chương trình từ Visual Studio. Thay vào đó, tôi nhận 'ConsoleApplication2.vshost'. –

Trả lời

18

Có hai cài đặt cho một dự án có thể liên quan đến vấn đề của bạn.

Đầu tiên và trước hết, Dự án + Thuộc tính, tab Xây dựng, Mục tiêu nền tảng. Trên một máy có hệ điều hành 64 bit, việc thiết lập này thành x86 sẽ giúp bạn có được danh sách các tên cá thể làm không bao gồm các quy trình 64 bit. Perfmon.exe là một quá trình 64-bit, nó cho thấy tất cả các trường hợp, cả hai ứng dụng 32-bit và 64-bit. Có được hành vi tương tự bằng cách đặt mục tiêu Nền tảng thành AnyCPU, đó không phải là mặc định nữa trên Visual Studio 2010. Bỏ chọn "Ưu tiên 32 bit" nếu bạn thấy nó.

Thứ hai là Dự án + Thuộc tính, tab Gỡ lỗi, "Bật quy trình lưu trữ Visual Studio". Khi được chọn, bạn đang gỡ lỗi một quá trình có tên là yourapp.vshost.exe thay vì yourapp.exe. Điều đó cũng ảnh hưởng đến tên cá thể, nó sẽ là yourapp.vshost. Không có khả năng là vấn đề trong trường hợp cụ thể của bạn.

Hãy chắc chắn cập nhật câu hỏi của bạn với thông tin quan trọng này nếu dự đoán này không chính xác.

+2

Đó là do mục tiêu Nền tảng. Thay đổi từ x86 thành 'CPU bất kỳ' đã hoạt động. Cảm ơn rất nhiều, tôi chưa bao giờ nghĩ về điều này! – rix0rrr

+0

Đồng thời đảm bảo 'Thuộc tính dự án -> Tab xây dựng -> Ưu tiên 32 bit' không được đặt. – Ananke

+0

Tôi có cùng một vấn đề. Tôi đã thử bất kỳ CPU, x86 và x64 nào (thích 32 bit không được đặt). Lỗi tương tự trong từng tình huống. Có ai gặp phải vấn đề này không? – Roger

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