2012-07-17 26 views
7

Tôi có đoạn mã này: Tôi tạo Bộ đếm hiệu suất ở đâu. Nó thực hiện ok, nếu không tồn tại nó tạo ra các truy cập hiệu suất là tốt, nhưng tôi không thể tìm thấy truy cập hiệu suất này, khi tôi sử dụng perfmon.Bộ đếm hiệu suất của tôi ở đâu? Nó được tạo ra nhưng tôi không thể nhìn thấy nó trong perfmon

Điều gì đang xảy ra?

const string _categoryName = "MyPerformanceCounter"; 
    if (!PerformanceCounterCategory.Exists(_categoryName)) 
    { 
     CounterCreationDataCollection counters = new CounterCreationDataCollection(); 

     CounterCreationData ccdWorkingThreads = new CounterCreationData(); 
     ccdWorkingThreads.CounterName = "# working threads"; 
     ccdWorkingThreads.CounterHelp = "Total number of operations executed"; 
     ccdWorkingThreads.CounterType = PerformanceCounterType.NumberOfItems32; 
     counters.Add(ccdWorkingThreads); 

     // create new category with the counters above 
     PerformanceCounterCategory.Create(_categoryName, 
       "Performance counters of my app", 
       PerformanceCounterCategoryType.SingleInstance, 
       counters); 
    } 
+2

Một vấn đề mà tôi đã gặp phải với bộ đếm perf trong quá khứ là quá trình chạy phải là quản trị viên hoặc có quyền nhất định để tạo bộ đếm hoàn tiền. Đây là lý do tại sao các bộ đếm perf mới thường được tạo tại thời điểm cài đặt thay vì thời gian chạy. Tôi không nhớ điều gì sẽ xảy ra nếu ứng dụng của bạn không có quyền quản trị; nó chỉ có thể âm thầm không tạo ra các quầy. Mặc dù tôi nghĩ rằng nó sẽ ném một ngoại lệ ... nhưng dù sao, hãy thử chạy ứng dụng của bạn với tư cách quản trị viên, nếu bạn chưa làm vậy. – CodingWithSpike

+3

Ngoài ra, nếu bạn tạo các bộ đếm trong khi perfmon đang chạy, bạn cần phải khởi động lại perfmon để làm cho nó nhận ra các quầy mới. –

+0

Ngoài ra, các quầy không hiển thị ngay lập tức. Đôi khi phải mất vài giây để có thể nhìn thấy chúng. –

Trả lời

2

Lý do không nhận bất kỳ ngoại lệ nào là khối try-catch bị thiếu. Nếu bạn thêm tuyên bố của mình vào thử và chặn chặn như thế này

 try 
     {     
      const string _categoryName = "MyPerformanceCounter"; 
      if (!PerformanceCounterCategory.Exists(_categoryName)) 
      { 
       CounterCreationDataCollection counters = 
       new CounterCreationDataCollection(); 

       CounterCreationData ccdWorkingThreads = new CounterCreationData(); 
       ccdWorkingThreads.CounterName = "# working threads"; 
       ccdWorkingThreads.CounterHelp = "Total number of operations executed"; 
       ccdWorkingThreads.CounterType = PerformanceCounterType.NumberOfItems32; 
       counters.Add(ccdWorkingThreads); 

       // create new category with the counters above 
       PerformanceCounterCategory.Create(_categoryName, 
         "Performance counters of my app", 
         PerformanceCounterCategoryType.SingleInstance, 
         counters); 
      }     
     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); //Do necessary action 
     } 

Sau đó, nó sẽ nắm bắt ngoại lệ.Nếu bạn thấy ngoại lệ như "Quyền truy cập đăng ký được yêu cầu không được phép". sau đó bạn yêu cầu quyền quản trị để thực hiện công cụ. Để xác nhận điều này Chạy Visual Studio với quyền quản trị và thực thi mã.

1

Ngoài việc chạy Visual Studio làm Quản trị viên để cho phép tạo danh mục, tôi có cùng vấn đề - mã .NET báo cáo rằng các quầy đã có, nhưng không có danh mục truy cập nào hiển thị trong perfmon.

Dường như nước hoa đôi khi sẽ là disable performance counters by flagging it as disabled in the registry.

Nếu bạn check in the registry dưới HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services bạn sẽ có thể tìm thấy danh mục bộ đếm hiệu suất của mình (chỉ cần tìm tên danh mục của bạn là một trong "thư mục"). Trong khóa con ("thư mục") Performance tìm giá trị đăng ký Disable Performance Counters và đặt thành 0. Khởi động lại perfmon và bây giờ bạn sẽ thấy các danh mục và quầy của bạn trong perfmon.