C# 性能计数器损坏?
性能计数器是邪恶的。不要使用它们C# 性能计数器损坏?,c#,.net,performancecounter,C#,.net,Performancecounter,性能计数器是邪恶的。不要使用它们 if(PerformanceCounterCategory.Exists("ILoveYou") ) // is true { PerformanceCounterCategory.Delete("ILoveYou"); //throws exception The **configuration registry** key is invalid } 我所发现的是: (使用LODCTR/R) 这也
if(PerformanceCounterCategory.Exists("ILoveYou") ) // is true
{
PerformanceCounterCategory.Delete("ILoveYou");
//throws exception The **configuration registry** key is invalid
}
我所发现的是: (使用LODCTR/R) 这也没用。因为我不知道他们在谈论什么文件。有人有其他想法吗 PS 我使用的是Windows XP SP3,这可能是问题所在吗?我知道除非我取消页面文件,否则它应该完全支持性能计数器
为了说明这一点,我的问题是无法卸载计数器。性能计数器更喜欢速度而不是可用性和正确性。XP和更高版本的Windows中的性能计数器很容易被破坏。例如,在应用程序启动时创建一个新的性能计数器类别,并在关闭时将其删除,这是一种非常糟糕的做法。不断更改性能计数器类别肯定会导致性能计数器损坏 我只会在类别尚不存在时创建类别,并将其保留在那里,直到卸载你的应用程序。您希望在什么情况下删除性能计数器类别?我能给你的基本答案是,除非你需要,否则不要删除性能计数器类别 如何通过lodctr或EXCTRLST重新创建性能计数器的一个好链接来自。你可以下载它 Edit1 首先,你需要找到一个工具来解决你的问题。为您提供重新启用损坏的性能计数器的UI
如果这样做有效,您现在可以使用procmon检查在修复操作期间写入了哪些注册表项,并将其用作自动修复功能的输入 我的公司经常遇到性能计数器损坏的问题。如果实际计数器损坏有问题,可以通过以下方式检查损坏的性能计数器:
start | run | perfmon
%windir%\system32
中找到并重命名这3个文件:
Perfc009.dat
Perfh009.dat
Perfi009.dat
D:\I386
)这是我们为该问题找到的最佳解决方案。如果您有一台类似的机器,您可以运行lodctr/S:mycounters.ini将所有计数器导出到“mycounters.ini”,然后使用lodctr/R:mycounters.ini在损坏的机器上导入它们。请记住,我只在两台机器上使用过这个过程,我知道这两台机器在性能计数器方面几乎相同。我不知道不匹配的机器是否会出现问题。对我来说 使用重新创建所有性能计数器就足够了
lodctr /R
从具有管理权限的命令行(根据,但跳过手动重新创建基本性能计数器)
在中检查注册表中的性能计数器列表时
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009
事实证明,关键的startet的内容包含大量空白。在该键的最末端有一个高计数器索引的性能计数器列表。调用上面的命令后,该键也正确地包含了基本性能计数器(并且不再包含前导空格)。在您提供的链接中还有另一个。你是否遵循了这些步骤,但仍然不起作用?@Schaliasos我确实遵循了链接,但我不明白在代码中应该做什么,我可以从理论上用代码实现他们的指令,但这很复杂,很长,很难看。现在我意识到我没有遵循链接指令命令需要某种文件,我不知道是哪一种。找不到解释您在使用哪个文件时遇到问题?%systemroot%(C:\Windows,最有可能)中的,或安装光盘上的,您必须从命令提示符下用
expand
命令展开的,是哪些代码在运行您显示的代码?您是否正在运行多个线程,因为上面的代码不是线程安全的(另一个线程可能会在if
检查和Delete
调用之间中断。这是我的重新安装程序。这就是我的问题所在。我在同一台计算机上完成了此操作,但存在以下问题:备份、手动编辑的备份文本文件(实际上删除了几个计数器),然后还原了结果文件。它成功了。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\009