我有一个 C# 应用程序,它在启动时添加了一些性能计数器。但是如果注册表 HKEY_LOCAL_MACHINE->SOFTWARE->Microsoft->Windows NT->CurrentVersion->Perflib 损坏(丢失或无效数据),检查性能计数器是否存在的操作(PerformanceCounterCategory.Exists(category) 确实需要很长一段时间(大约 30 秒)才最终抛出异常(InvalidOperation:类别不存在)。
我的问题是如何在尝试添加性能计数器(以及有效性意味着什么)之前验证注册表的有效性,或者是否存在我可以使 perf 计数器操作超时,这样就不需要 30 秒来获得异常。
3 回答
1
我怀疑“有效性”是您不了解的内部实现细节。但是,您至少可以尝试打开相同的注册表项并查看它们是否存在。您可以使用Process Explorer来确定它正在读取哪些键。
但是,我质疑你为什么会关心。损坏的注册表不应该是一件很常见的事情,如果是,您将如何处理它?你能做的就是放弃。所以你不妨抓住异常。我会将其视为任何其他阻塞操作,并在工作线程(而不是 UI 线程)上执行,并向您的用户显示进度,以便他们知道您的应用程序没有挂起。
于 2010-03-22T22:13:32.900 回答
0
您确定注册表已损坏?
我发现我的程序没有权限在运行时创建性能计数器。相反,我将计数器的创建添加到我的安装程序中,并且安装程序必须以管理员身份运行。在运行时,我的程序访问或更新已经创建的计数器没有问题。
于 2010-03-22T22:16:56.703 回答
0
我不知道如何按要求回答您的问题,但如果我理解正确,问题是它看起来好像应用程序在启动时挂起长达 30 秒。
如果是这种情况,我建议您可以通过创建一个工作线程,告诉它创建性能监视器然后继续启动应用程序来避免这种情况。
我没有使用过性能计数器,所以我不能说它们是否有任何东西可以阻止它工作?
于 2010-04-29T18:21:59.963 回答