性能计数器损坏?
性能指标是EVIL。 不要使用它们。
if(PerformanceCounterCategory.Exists("ILoveYou") ) // is true { PerformanceCounterCategory.Delete("ILoveYou"); //throws exception The **configuration registry** key is invalid }
at System.Diagnostics.PerformanceCounterLib.RegisterFiles(String arg0, Boolean unregister) at System.Diagnostics.PerformanceCounterLib.UnregisterCategory(String categoryName) at System.Diagnostics.PerformanceCounterCategory.Delete(String categoryName) at WindowsFormsApplication1.Program.SetupCategory()
所有我发现的是: http : //blogs.msdn.com/b/oanapl/archive/2009/04/24/fix-corrupted-performance-counters.aspx (使用LODCTR / R)
它没有帮助。 因为我不知道他们在说什么文件。 any1还有其他想法吗?
PS我用windows xp SP3可能这个问题? 我知道除非我取消页面文件,否则应该完全支持性能计数器。
这清楚我的问题是我无法卸载我的计数器。
我的公司遇到了性能计数器定期腐败的问题。 如果实际计数器损坏是一个问题,您可以通过以下方式检查损坏的性能计数器:
- 要
start | run | perfmon
start | run | perfmon
- 单击确定
- 单击右侧面板工具栏上的添加按钮(“+”符号按钮)
- 确保proformance对象下拉菜单包含项目而不仅仅是数字
如果计数器是数字或空白:
%windir%\system32
找到并重命名这3个文件:
-
Perfc009.dat
-
Perfh009.dat
-
Perfi009.dat
D:\I386
) 这是我们针对该问题找到的最佳解决方案。
如果您有类似的机器,您可以运行lodctr /S:mycounters.ini将所有计数器导出到’mycounters.ini’,然后使用lodctr /R:mycounters.ini将它们导入到损坏的机器上。 请记住,我只在两台机器上使用了这个程序,我知道它们在perf计数器方面几乎完全相同。 我不知道机器是否会出现问题。
为了我,
用它来重新创建所有性能计数器就足够了
lodctr /R
从具有管理权限的命令行(根据此 ,但跳过基本性能计数器的手动重新创建)
检查注册表中的性能计数器列表时
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009
事实certificate,那个关键的内容有很多空白。 在该密钥的最后有一个具有高计数器索引的性能计数器列表。 在调用上面的命令之后,密钥也正确地包含了基本性能计数器(并且不再包含前导空格)。
性能计数器有利于速度而不是可用性和正确性。 XP和更高版本的Windows版本中的性能计数器很容易被破坏。 例如,在启动应用程序时创建新的性能计数器类别并在关闭时删除它是一种非常糟糕的做法。 对性能计数器类别的不断更改是获得损坏的性能计数器的必然结果。
我只会在尚未存在的情况下创建类别,并将其保留在那里直到您的应用程序被卸载。 您希望在什么样的情况下删除性能计数器类别? 我可以给你的基本答案是不删除性能计数器类别,除非你需要。
如何通过lodctr或EXCTRLST重新创建性能计数器的一个很好的链接来自RedGate 。 你可以在这里下载。
EDIT1
首先,您需要找到一个可以解决问题的工具。 Exctrlst为您提供了一个UI来重新启用损坏的性能计数器。
如果确实有效,您现在可以检查procmon在修复操作期间写入哪些注册表项,并将其用作自动修复function的输入。