我有一个C#应用程序,它启动时添加了一些性能计数器。但是,如果注册表HKEY_LOCAL_MACHINE-> SOFTWARE-> Microsoft-> Windows NT-> CurrentVersion-> Perflib已损坏(丢失或无效数据),检查性能计数器(PerformanceCounterCategory.Exists(category)是否存在的操作确实需要很长时间(约30秒)才终于抛出异常(InvalidOperation:类别不存在)
我的问题是我如何在尝试添加性能计数器(以及什么有效性的方法)之前验证注册表的有效性,或者如果有一种方法我可以超时性能计数器操作,以便它不需要30秒来得到一个异常。性能计数器注册表验证
回答
我怀疑“有效性”是一个内部实现细节,你不知道。但是,您至少可以尝试打开相同的注册表项并查看如果它们存在。您可以使用Process Explorer来确定它正在读取哪些键。
但是,我质疑你为什么会关心。损坏的注册表不应该是一件非常常见的事情,如果是这样,你会怎么做?你所能做的就是退出。所以你可能只是赶上例外。我会像其他任何阻止操作一样对待它,并在工作线程(而不是UI线程)上执行此操作,并向用户显示进度,以便他们知道您的应用程序未挂起。
你确定注册表已损坏吗?
我发现我的程序没有权限在运行时创建性能计数器。相反,我将计数器的创建添加到了我的安装程序,并且安装程序必须以管理员身份运行。在运行时,我的程序在访问或更新已经创建的计数器时没有问题。
这不是权限的问题,因为我已经有一个适当的检查,以确保用户具有管理员权限。注册表中的条目没有价值,因此在30秒后抛出异常。事实上,我不在乎我是否得到异常,只要不需要30秒即可得到它 – anchandra 2010-03-22 23:45:44
我不知道如何回答你提出的问题,但如果我理解正确,问题是它看起来像用户启动时挂起应用程序长达30秒。
如果是这样的话,我建议你可以通过创建一个工作者线程来避免这种情况,告诉它创建性能监视器,然后继续启动应用程序。
我还没有与性能计数器合作过,所以我不能说是否有什么会阻止它工作?
- 1. 无法注册Oracle性能计数器
- 2. 取消注册性能计数器
- 3. 数据库设计:注册和验证
- 4. 以编程方式在注册表中注册性能计数器
- 5. PHP注册表单验证
- 6. 在注册表中验证数据
- 7. OpenID身份验证的注册表
- 8. 如何验证注册表脚本
- 9. Facebook,如何验证注册表单?
- 10. Portainer注册表身份验证
- 11. 注册Jquery邮件验证
- 12. 注册验证无效java
- 13. PHP验证注册用户
- 14. django注册与Django数学验证码
- 15. 如何验证注册表单验证码?
- 16. Javascript验证不能在html注册表格中工作
- 17. NHibernate验证器性能
- 18. 注册表:错误推送到注册表:需要身份验证
- 19. laravel将表单数据添加到身份验证注册
- 20. 验证性能
- 21. 设计:注册后验证无需确认
- 22. 试图添加验证到轨道设计注册页面
- 23. MVC PHP设计注册表
- 24. 用户注册电子邮件验证
- 25. ASP.NET MVC注册与验证码
- 26. 用户名验证注册MVC - JSP,Servlets
- 27. Android应用程序的注册验证
- 28. ServiceStack Twitter身份验证和注册
- 29. 注册Twitter错误。无法验证
- 30. xfbml注册插件验证错误
我关心它,因为它会影响产品的用户体验,虽然我同意你无效的注册表项不应该是一种常见事件,但我仍然需要覆盖此场景。我问这个问题,希望别人碰到这个障碍,并有一个更具体的解决方案。无论如何,谢谢 – anchandra 2010-03-22 23:43:21
是的,我认为你所能做的最好的事情不是挂起并处理它,而不是试图预测它会发生。也许有更好的方法。 – 2010-03-23 06:14:03