.NET 4.0 和 Windows 7 上的性能计数器

Posted

技术标签:

【中文标题】.NET 4.0 和 Windows 7 上的性能计数器【英文标题】:PerformanceCounters on .NET 4.0 & Windows 7 【发布时间】:2010-12-05 04:12:51 【问题描述】:

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

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

class Program

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

我确实以管理员身份运行该程序。我是否在附加 VS/Debugger 的情况下运行它并不重要。我没有另一台装有 Windows 7 或 VS2010 的机器来对其进行测试,所以我不确定哪个使事情变得复杂(或两者兼而有之?)。它是 Windows 7 x64,我尝试强制应用在 x32 和 x64 中运行,但得到相同的结果。

【问题讨论】:

如果您不确定 Windows vs .net 版本,您可以尝试将 VS 中的项目属性更改为目标 .net 3.5,重新构建,然后重试。或者你可以在vista/xp机器上用2008构建相同的代码,然后将exe复制到Win7机器上。 【参考方案1】:

我的系统上的性能计数器似乎已损坏。虽然我没有完全关注this post,但它引导我找到了解决方案。这是我所做的:

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

lodctr /?

里面有用的东西……

然后输入:

lodctr /R

根据上一步中的文档,这会让 Windows 根据当前的注册表设置和备份 INI 文件从头开始重建 perf 注册表字符串和信息。 我感觉这就是做了魔术。但是,接下来我注意到 .NET 性能计数器不再存在,因此基于 this 我键入以下内容以重新加载它们:

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

请注意,此路径适用于 x64 上的 .NET Framework 4.0。您可以想象框架/平台的其他变体的路径。我猜测您应该始终从已安装的 .NET 框架的最高版本加载计数器,但这只是猜测。

我希望有一天这对其他人有所帮助!

【讨论】:

有什么想法会导致这种情况发生吗? 感谢您的回答,为我节省了很多时间。 这是一个烦人的错误,感谢您的回答,也为我修复了它! 这个答案也为我节省了很多时间。谢谢! 我只需要运行 lodctr /R 即可为我解决同样的问题。

以上是关于.NET 4.0 和 Windows 7 上的性能计数器的主要内容,如果未能解决你的问题,请参考以下文章

哪些 GPS 加密狗适用于 Windows 7 和 .Net 4.0 System.Device.Location 命名空间?

Windows XP 上的 .Net Framework 4.0

如何在 IIS 7、Windows 7 上将 ASP.NET 4.0 添加为应用程序池

在 Windows Server 2012 上的 .NET 4.0 上运行服务构建时出现 System.Configuration.ConfigurationException

在 iis 7.0 上运行 .net framework 4.0 网站时出现问题

win10系统无法安装.net framework 4.0怎么办