性能计数器损坏?

时间:2012-05-28 05:23:18

标签: c# .net performancecounter

性能指标是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可能这个问题?据我所知,除非我取消页面文件,否则应该完全支持性能计数器。

明确我的问题是我无法卸载我的计数器。

4 个答案:

答案 0 :(得分:4)

我的公司遇到问题,性能指标经常腐败。如果实际计数器损坏是一个问题,您可以通过以下方式检查损坏的性能计数器:     

        
  1. 转到start | run | perfmon
  2.     
  3. 点击确定
  4.     
  5. 点击右侧面板工具栏上的添加按钮(“+”按钮)
  6.     
  7. 确保proformance对象下拉菜单包含项目而不仅仅是数字
  8.      如果计数器是数字或空白:          
  9. %windir%\system32中找到并重命名这3个文件:     
    • Perfc009.dat
    •         
    • Perfh009.dat
    •         
    • Perfi009.dat
    •     
  10.     
  11. 插入Windows XP安装CD
  12.     
  13. 浏览到他们的CD驱动器和I386文件夹(即D:\I386
  14.     
  15. 在此处找到相同的文件
  16.     
  17. 将它们从CD复制并粘贴回System32
  18.     
  19. 重新启动计算机。
  20.     

    这是我们为此问题找到的最佳解决方案。

答案 1 :(得分:3)

如果您有类似的机器,可以运行lodctr /S:mycounters.ini将所有计数器导出到'mycounters.ini',然后使用lodctr /R:mycounters.ini将它们导入到损坏的机器上。但请记住,我只在两台机器上使用了这个程序,我知道它们在性能计数器方面几乎完全相同。我不知道机器是否会出现问题。

答案 2 :(得分:3)

对我来说,

使用

重新创建所有性能计数器就足够了
lodctr /R

来自具有管理权限的命令行(根据this,但跳过基本性能计数器的手动重新创建)

中检查注册表中的性能计数器列表时
 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009

事实证明,该关键字的内容与 lot 的空格有关。在该密钥的最后有一个具有高计数器索引的性能计数器列表。在调用上面的命令之后,密钥也正确地包含了基本性能计数器(并且不再包含前导空格)。

答案 3 :(得分:1)

性能指标有利于提高可用性和正确性。 XP和更高版本的Windows版本中的性能计数器很容易被破坏。它是例如在启动应用程序时创建新的性能计数器类别并在关闭时删除它是一种非常糟糕的做法。对性能计数器类别的不断更改肯定会导致损坏的性能计数器。

我会仅在尚未存在的情况下创建类别,并将其保留在那里直到您的应用程序被卸载。在什么样的情况下你想删除一个性能指标类别?我可以给你的基本答案是不删除性能计数器类别,除非你需要。

如何通过lodctr或EXCTRLST重新创建性能计数器的一个很好的链接来自RedGate。您可以下载here

<强> EDIT1

首先,您需要找到一个可以解决问题的工具。 Exctrlst为您提供了重新启用损坏的性能计数器的UI。

如果确实有效,您现在可以检查procmon在修复操作期间写入哪些注册表项,并将其用作自动修复功能的输入。