2009-09-21 26 views
5

Tôi phải làm điều gì đó rất sai ở đây. Tôi tạo bộ đếm hiệu suất tùy chỉnh như sau:Tại sao các quầy hiệu suất của tôi không thay đổi?

string counterCategory = "Test Category"; 
string counterName = "Test Counter"; 

if (!PerformanceCounterCategory.Exists(counterCategory)) 
{ 
    Console.WriteLine("Creating Counters"); 

    CounterCreationDataCollection counterCreationDataCollection = 
     new CounterCreationDataCollection(); 

    counterCreationDataCollection.Add(
     new CounterCreationData(counterName, 
     "Description", 
     PerformanceCounterType.NumberOfItems32) 
    ); 

    PerformanceCounterCategory.Create(counterCategory, 
     "My category description/Help", 
     PerformanceCounterCategoryType.SingleInstance, 
     counterCreationDataCollection); 
} 

Danh mục và bộ đếm được tạo và có thể xem trong màn hình hiệu suất.

sau đó tôi cố gắng để thay đổi giá trị của bộ đếm

PerformanceCounter myCounter = 
    new PerformanceCounter(counterCategory, counterName, false); 

for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine("Setting to "+i); 
    myCounter.RawValue = i; 
    Thread.Sleep(200); 
} 

myCounter.Close(); 

Tuy nhiên như tôi ngồi và xem bộ đếm trong màn biểu diễn có gì xảy ra, giá trị không bao giờ thay đổi.

Vì vậy, tôi đang làm gì sai?

Nếu tôi thêm lệnh gọi nextValue() hoặc rawValue(), giá trị từ đó được trả lại như tôi mong đợi nhưng Màn hình hiệu suất của Windows vẫn hiển thị đường thẳng, ví dụ:

for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine("Setting to "+i); 
    myCounter.IncrementValue() 
    Console.WriteLine("Next Value = "+myCounter.RawValue()); 
    Thread.Sleep(200); 
} 

Edit: tôi đã tìm thấy rằng nếu tôi đóng giám sát hoạt động và sau đó mở lại nó mà không xóa các quầy, mà đột nhiên nó nhận ra đó là một giá trị mới. Vì vậy, các giá trị đang được thiết lập, và bền bỉ, tuy nhiên Performance Monitor không thấy những thay đổi.

Trả lời

2

Theo dõi là theo thứ tự. Nó xuất hiện, dưới Win7 anyway, rằng màn hình hiệu suất có thể không hoạt động như mong đợi. Khi tôi viết mã thử nghiệm, tôi đã tạm dừng ứng dụng sau khi tạo các bộ đếm, để bắt đầu theo dõi hiệu suất. Một khi tôi để cho nó tiếp tục màn hình không bao giờ thay đổi nó quầy, mặc dù truy cập cơ bản đang được thay đổi.

Nếu sau đó tôi thoát khỏi màn hình hiệu suất và khởi động lại nó, giá trị bộ đếm cuối cùng trong chương trình thử nghiệm sẽ được hiển thị, cho biết rằng nó đã được đặt chính xác. Nếu sau đó tôi chạy chương trình thử nghiệm một lần nữa, chỉ cần thay đổi giá trị, màn hình hiệu suất cuối cùng sẽ nhận các thay đổi.

Vì vậy, mã, như mọi người đã chỉ ra là chính xác, đó là màn hình Hiệu suất Windows bị lỗi.

Cảm ơn tất cả các bạn đã trả lời!

+0

Hoặc trong trường hợp của tôi, khởi động lại. –

0

Mã của bạn có vẻ tốt. Từ ví dụ làm việc của tôi, sự khác biệt duy nhất là tôi gọi phương thức increment sau khi thiết lập RawValue.

PerformanceCounter myCounter = 
    new PerformanceCounter(counterCategory, counterName, false); 

for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine("Setting to "+i); 
    myCounter.Increment(); 
    Thread.Sleep(200); 
} 

myCounter.Close(); 
+0

Không, vẫn là một đường thẳng tôi sợ, với Increment() và thiết lập RawValue. – blowdart

+0

Vui nhộn. Sẽ nhìn vào nó trong giờ ăn trưa. – Dejan

1

Có thể trong quá trình thử nghiệm mà bạn đã thay đổi tên truy cập không? Mã của bạn không xác minh rằng danh mục chứa bộ đếm của bạn - nó chỉ kiểm tra xem danh mục có tồn tại hay không, và nếu có, nó sẽ không tạo danh mục.

Nếu bạn đã đổi tên truy cập kể từ lần tạo danh mục đầu tiên, bộ đếm mới của bạn sẽ không tồn tại trong danh mục và bạn có thể thiếu một chút khác biệt về tên bộ đếm khi xem nó trong Trình theo dõi hiệu suất.

+0

Đó là một ý tưởng hay, nhưng tôi đang xóa danh mục trước khi tôi chạy, vì vậy nó sẽ được tạo lại, sau đó cả tên danh mục và tên bộ đếm được giữ trong các chuỗi được sử dụng cho cả việc tạo và mở bộ đếm. – blowdart

+1

Đây có phải là một phần của dự án lớn hơn không? Khi tôi lấy mã của bạn từ câu hỏi và bọc nó trong phương thức 'static void Main (string [] args)' của một dự án bàn điều khiển, nó làm việc mà không cần sửa đổi.Tôi cần phải chạy nó hai lần, một lần để tạo ra các loại để tôi có thể tìm thấy nó trong Performance Monitor, sau đó một lần thứ hai để xem các thay đổi giá trị. – GBegen

+0

Đây là một ứng dụng giao diện điều khiển (và để cho một trang web thú vị đặt giá trị thô). Tôi đã kết thúc đóng màn hình hiệu suất và mở nó một lần nữa và lo, nó đột nhiên thấy những thay đổi. Nó có thể là nó không giống như giám sát ngay sau khi một truy cập được tạo ra. – blowdart

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