12

性能计数器是邪恶的。不要使用它们。

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)

它没有帮助。因为我不知道他们在说什么文件。有人有其他想法吗?

PS我使用的是Windows XP SP3,可能是这个问题吗?我知道除非我取消页面文件,否则它应该完全支持性能计数器。

为了明确这一点,我的问题是我无法卸载我的计数器。

4

4 回答 4

4

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

  1. 即将start | run | perfmon
  2. 点击确定
  3. 单击右侧面板中工具栏上的添加按钮(“+”号按钮)
  4. 确保形式对象下拉菜单包含项目而不仅仅是数字
如果计数器是数字或空白:
  • 在以下位置找到并重命名这 3 个文件%windir%\system32
    • Perfc009.dat
    • Perfh009.dat
    • Perfi009.dat
  • 插入 Windows XP 安装 CD
  • 浏览到他们的 CD 驱动器并进入 I386 文件夹(即D:\I386
  • 在此处找到相同的文件
  • 将它们从 CD 复制并粘贴回 System32
  • 重新启动计算机。
  • 这是我们为该问题找到的最佳解决方案。

    于 2012-06-05T13:01:05.440 回答
    3

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

    于 2012-12-03T16:43:00.430 回答
    3

    为了我,

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

    lodctr /R
    

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

    在检查注册表中的性能计数器列表时

     HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009
    

    事实证明,那个关键 startet 的内容有很多空格。在该键的末尾有一个具有高计数器索引的性能计数器列表。调用上述命令后,密钥也正确包含基本性能计数器(并且不再包含前导空格)。

    于 2013-08-07T14:23:38.033 回答
    1

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

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

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

    编辑1

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

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

    于 2012-06-03T22:04:27.303 回答