代码之家  ›  专栏  ›  技术社区  ›  Andrew Matthews

请求的性能计数器不是自定义计数器,必须将其初始化为只读

  •  37
  • Andrew Matthews  · 技术社区  · 15 年前

    每当我尝试调试.NET Windows服务应用程序时,性能计数器上的readonly属性出现重复错误。此应用程序在x86 Windows Vista或x86 Windows 2003上工作正常。它刚刚停止在我的新64位dev机器上工作。

    我已经在管理模式下对64位和32位命令行vcvars.bat运行了相关的installUtil调用。我得到 设置类别和每个性能计数器时无错误 . 但是,无论我是否将性能ctr设置为只读,我都会得到:

    请求的性能计数器是 不是自定义计数器,它必须 初始化为只读。

    更新

    我用32位版本的Windows7重新安装了这台机器,但奇怪的是,我仍然得到这个错误。唯一改变的是从Windows Vista Business转向Windows 7 Professional。这个能响吗?

    4 回复  |  直到 6 年前
        1
  •  50
  •   ShuggyCoUk    15 年前

    这是因为性能计数器(或类别) not existing ,请 但有一个可怕的错误信息。

    看看Perfmon中的计数器,它应该在相关机器上丢失。

    我发现.NET性能计数器有时会发生这种情况(不知道为什么),但是 using lodctr 把它们拿回来。如果你指出你想得到哪个性能计数器,我们可能会给你更多的帮助。

    1. 请注意,行中的示例适用于.NET 1.1,请相应地针对不同的框架进行调整。
        2
  •  8
  •   Daniel Little    12 年前

    我遇到了这个问题的一个变种,虽然我可以在Reflector中看到.NET性能计数器选项卡,但它实际上没有计数器。

    I had to re-add them

    lodctr /R
    cd C:\Windows\Inf\.NETFramework
    lodctr corperfmonsymbols.ini
    
        3
  •  2
  •   Mateusz Moska    7 年前

    我在这个问题上花了好几个小时,遵循网络上的所有指示,所以我决定分享我的解决方案,也许这会为其他人节省一些时间。 最后,我在评论中的一个链接下得到了提示:

    您需要以管理员身份运行Visual Studio

    我的应用程序正在使用masstrasit和rabbitmq,它无法向队列发送消息。很明显,它在引擎盖下添加了一些性能计数器,在没有管理员权限的情况下失败,并出现了非常描述性的错误。 有趣的是,你只需要第一次以管理员身份运行它(这就是欺骗我的原因)。

        4
  •  0
  •   Saeed Mousavi    6 年前

    我在部署机器上得到了这个误导性错误,我使用FirstChanceException机制捕获了这个错误, 发生此错误后,IIS正在重复停止相关的应用程序池,我在调用站点时遇到“服务不可用”错误,

    我尝试了很多天来停止计数器或查找/添加相关的计数器,但它没有工作。

    所以我在服务器上安装了vs,并调试并注意到 我在异步操作中调用了一个不可等待的LINQ查询,但该操作没有正确执行。 因此,在应用程序线程中有一个缺陷, 当有很多网站访问者时,这个bug就会出现,IIS会抛出这个异常并停止工作。

    在检查了shuggycouk答案和其他答案之后,如果您仍然收到错误,我的建议是考虑检查相关的异步函数。