.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,但得到相同的结果。

  • Windows 8商店应用程序(Metro)运行在Windows 7还是XP?
  • 在Windows 7中存储的Java首选项在哪里?
  • 程序启动时如何请求pipe理员权限?
  • “以pipe理员身份运行”的确切含义是什么?
  • windows heroku运行rake db:迁移错误“/ usr / bin / env:ruby.exe:没有这样的文件或目录”
  • Windows 7中,update.packages问题:“无法移动临时安装”?
  • 如何开始使用Windows 7小工具
  • 我如何强制我的.NET应用程序以pipe理员身份运行?
  • 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框架的最高版本加载计数器,但这只是一个猜测。

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