2009-10-08 42 views
33

Tôi có một chương trình hoạt động tốt trên VS2008 và Vista, nhưng tôi đang thử nó trên Windows 7 và VS2010/.NET Framework 4.0 và nó không hoạt động. Cuối cùng, vấn đề là System.Diagnostics.PerformanceCounterCategory.GetCategories() (và các phương thức PerformanceCounterCategory khác) không hoạt động. Tôi nhận được một System.InvalidOperationException với thông báo "Không thể tải dữ liệu tên truy cập vì một chỉ mục không hợp lệ" đã được đọc từ sổ đăng ký. "PerformanceCounters trên .NET 4.0 & Windows 7

tôi có thể tái sản xuất này với các chương trình rất đơn giản hiển thị dưới đây:

class Program 
{ 
    static void Main(string[] args) 
    { 
     foreach (var pc in System.Diagnostics.PerformanceCounterCategory.GetCategories()) 
     { 
      Console.WriteLine(pc.CategoryName); 
     } 
    } 
} 

tôi đã chắc chắn rằng tôi đang chạy chương trình như một quản trị viên. Nó không quan trọng nếu tôi chạy nó với VS/Debugger đính kèm hay không. Tôi không có một máy tính khác với Windows 7 hoặc VS2010 để kiểm tra nó trên, vì vậy tôi không chắc chắn đó là những điều phức tạp ở đây (hoặc cả hai?). Đó là Windows 7 x64 và tôi đã cố gắng buộc các ứng dụng để chạy trong cả hai x32 và x64 nhưng có được kết quả tương tự.

+1

Nếu bạn không chắc chắn về phiên bản Windows so với .net, bạn có thể thử thay đổi thuộc tính dự án trong VS để nhắm mục tiêu .net 3.5, xây dựng lại và thử lại. Hoặc bạn có thể tạo cùng mã trên máy vista/xp với năm 2008 và sao chép exe vào máy Win7. – JMarsch

+0

Mẹo hay. Cảm ơn. –

Trả lời

87

Dường như các bộ đếm hiệu năng bị hỏng trên hệ thống của tôi. Mặc dù tôi đã không theo dõi chính xác số this post, nó đã dẫn tôi đến giải pháp. Dưới đây là những gì tôi đã làm:

Trong một dấu nhắc lệnh với administrator/nâng cao đặc quyền gõ như sau:

lodctr /? 

thứ hữu ích trong đó ...

Sau đó gõ:

lodctr /R 

Theo các tài liệu từ bước trước, điều này sẽ giúp các cửa sổ để xây dựng lại các chuỗi đăng ký hoàn hảo và thông tin từ đầu dựa trên cài đặt đăng ký hiện tại và b các tệp INI ackup. Tôi có cảm giác đây là điều kỳ diệu. Tuy nhiên, bên cạnh tôi nhận thấy các quầy hiệu suất NET đã không còn ở đó nữa nên dựa trên this Tôi gõ phần sau đây để tải lại chúng:

lodctr "C:\Windows\Microsoft.NET\Framework64\v4.0.20506\corperfmonsymbols.ini" 

Lưu ý rằng con đường này là dành cho .NET Framework 4.0 x64. Bạn có thể tưởng tượng đường dẫn cho các biến thể khác của khung/nền tảng. Tôi đang đoán bạn nên luôn tải bộ đếm từ phiên bản .NET framework cao nhất mà bạn đã cài đặt, nhưng đó chỉ là phỏng đoán.

Tôi hy vọng điều này sẽ giúp người khác một ngày nào đó!

+2

Tổng! Nhưng cảm ơn đã cho chúng tôi biết :-) – KiNgMaR

+1

Hy vọng của bạn đã được đáp ứng. ;) Cám ơn vì cái này!!! – valveLondon

+1

Có ý tưởng nào về nguyên nhân của việc này không? – JeremyK