.NET 4.0和Windows 7上的PerformanceCounters

我有一个在VS2008和Vista上正常工作的程序,但是我在Windows 7和VS2010 / .NET Framework 4.0上试用它,它不工作。 最终问题是System.Diagnostics.PerformanceCounterCategory.GetCategories() (和其他PerformanceCounterCategory方法)不起作用。 我得到一个System.InvalidOperationException消息“无法加载计数器名称数据,因为从registry中读取了一个无效的索引”。

我可以用下面显示的非常简单的程序重现这个:

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

我确实以pipe理员身份运行程序。 不pipe我是否用VS / Debugger运行它都没关系。 我没有另一台Windows 7或VS2010的机器来testing它,所以我不知道这是(或两者?)的东西是复杂的。 这是Windows 7 x64,我试图迫使应用程序运行在x32和x64,但得到相同的结果。

One Solution collect form web for “.NET 4.0和Windows 7上的PerformanceCounters”

看来性能计数器在我的系统上损坏了。 虽然我没有完全按照这个post ,但是它使我find了解决办法。 这是我做的:

在具有pipe理员/提升特权的命令提示符中键入以下内容:

 lodctr /? 

那里有用的东西…

然后键入:

 lodctr /R 

根据上一步的文档,这将得到Windows 根据当前registry设置和备份INI文件从头开始重buildperfregistrystring和信息。 我有一种感觉,这是什么魔术。 但是,接下来我注意到.NET性能计数器不在那里了,所以我input以下内容来重新加载它们:

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

请注意,此path适用于x64上的.NET Framework 4.0。 你可以想像其他变体的框架/平台的path。 我你应该总是从你安装的.NET框架的最高版本加载计数器,但这只是一个猜测。

我希望这有助于别人有一天!

  • 如何检测我的进程是否正在运行UAC提升?
  • 双击Windows 7(64)如何运行.jar文件
  • 如何通过命令提示符清空recyclebin?
  • 使用Windows任务计划程序运行batch file
  • 在Windows 7欢迎屏幕上运行一个进程
  • 如何在电话应用程序中包装网站?
  • 如何删除Windows 7上的Java程序的标题栏和任务栏图标?
  • 如何使Eclipse在Windows 7任务栏中performance良好?