Hầu hết các bộ đếm hiệu suất của nhiều thể hiện trong Windows có vẻ tự động (?) Có một dấu #n ở cuối nếu có nhiều cá thể có cùng tên.Đặt tên các bộ đếm hiệu năng đa dụ trong .NET
Ví dụ: nếu, trong Perfmon, bạn nhìn theo thể loại Process
, bạn sẽ thấy:
...
dwm
explorer
explorer#1
...
Tôi có hai explorer.exe
quá trình, vì vậy quầy thứ hai có # 1 gắn vào tên của nó.
Khi tôi cố gắng để làm điều này trong một ứng dụng .NET:
- tôi có thể tạo ra các thể loại, và đăng ký các trường hợp (sử dụng
PerformanceCounterCategory.Create
mà phải mất mộtCounterCreationDataCollection
). - Tôi có thể mở bộ đếm để viết và ghi vào đó.
Khi tôi mở bộ đếm lần thứ hai (trong một quy trình khác), nó sẽ mở cùng một bộ đếm. Điều này có nghĩa rằng tôi có hai quá trình chiến đấu trên các quầy.
documentation for PerformanceCounter.InstanceName
tuyên bố rằng #
không được phép trong tên.
Vì vậy: làm cách nào để có nhiều bộ đếm hiệu suất thể hiện thực sự là nhiều phiên bản? Và nơi các trường hợp thứ hai (và tiếp theo) nhận được #n
được thêm vào tên?
Tức là: Tôi biết rằng tôi có thể đặt ID quá trình (ví dụ) vào tên cá thể. Điều này làm việc, nhưng có tác dụng phụ không may mà khởi động lại quá trình kết quả trong một PID mới, và Perfmon tiếp tục theo dõi các truy cập cũ.
Cập nhật:
tôi là tạo ra các loại (và đếm) như sau:
const string categoryName = "Test App";
const string counterName = "Number of kittens";
string instanceName =
Path.GetFileNameWithoutExtension(
Process.GetCurrentProcess().MainModule.FileName);
if (!PerformanceCounterCategory.Exists(categoryName))
{
var counterCreationDataCollection = new CounterCreationDataCollection
{
new CounterCreationData(counterName, "",
PerformanceCounterType.NumberOfItems32)
};
PerformanceCounterCategory.Create(categoryName, "",
PerformanceCounterCategoryType.MultiInstance,
counterCreationDataCollection);
}
Tôi đang mở quầy như sau:
PerformanceCounter counter = new PerformanceCounter(
categoryName, counterName, instanceName, readOnly: false);
Khi bạn mở bộ đếm hiệu suất lần thứ hai, bạn có đang thực hiện nó trong một quy trình khác hoặc từ một thành phần khác trong cùng một quy trình không? – JMarsch
Quy trình khác nhau. –
Tôi nghĩ rằng bạn phải mở chúng với các tên cá thể khác nhau. Nếu không, bạn sẽ kết thúc bằng văn bản để truy cập sai. Ngoài ra, hãy xem http://msdn.microsoft.com/en-us/library/dd537616.aspx dường như gợi ý rằng "# 1" đang được thêm vào bởi perfmon. – feroze