繁体   English   中英

性能计数器注册表验证

[英]Performance Counters Registry validation

我有一个C#应用程序,它在启动时会添加一些性能计数器。 但是,如果注册表HKEY_LOCAL_MACHINE-> SOFTWARE-> Microsoft-> Windows NT-> CurrentVersion-> Perflib已损坏(丢失或无效数据),则检查性能计数器是否存在的操作(PerformanceCounterCategory.Exists(category)确实需要长时间(大约30秒)之后才引发异常(InvalidOperation:类别不存在)。

我的问题是,在尝试添加性能计数器之前,我如何才能验证注册表的有效性(以及有效性的含义),或者是否有一种方法可以使性能计数器操作超时,从而无需花费30秒钟即可获得一个例外。

我怀疑“有效性”是您不了解的内部实现细节。 但是,您至少可以尝试打开相同的注册表项,然后看看它们是否存在。 您可以使用Process Explorer找出正在读取的键。

但是,我质疑您为什么还要关心。 损坏的注册表不应该是很常见的事情,如果是的话,您将如何处理? 你所能做的就是戒烟。 因此,您最好只捕获异常。 我会像对待其他任何阻塞操作一样对待它,并在辅助线程(而不是UI线程)上执行此操作,并向用户显示进度,以便他们知道您的应用未挂起。

您确定注册表已损坏?

我发现我的程序没有在运行时创建性能计数器的权限。 相反,我将计数器的创建添加到了我的安装程序中,并且该安装程序必须以管理员身份运行。 在运行时,我的程序可以访问或更新已创建的计数器。

我不知道如何按照要求回答您的问题,但是如果我理解正确,那么问题在于,它看起来像是应用程序在启动时挂起了30秒。

如果是这样,我建议您可以通过创建一个工作线程,告诉它创建性能监视器,然后继续启动应用程序来避免这种情况。
我没有使用性能计数器,所以我不能说是否有什么可以阻止其工作?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM