【问题标题】:The requested Performance Counter is not a custom counter, it has to be initialized as ReadOnly请求的性能计数器不是自定义计数器,它必须初始化为 ReadOnly
【发布时间】:2011-01-04 00:59:47
【问题描述】:

每当我尝试调试 .NET Windows 服务应用程序时,我都会收到有关性能计数器上 ReadOnly 属性的重复错误。这个应用程序在 x86 windows vista 或 x86 windows 2003 上运行良好。它刚刚停止在我的新 64 位开发机器上运行。

我已经在 64 位和 32 位命令行 VCVARS.bat 上以管理员模式运行了相关的 InstallUtil 调用。我得到设置类别和每个性能计数器没有错误。但是,无论我是否将 perf ctrs 设置为只读,我都会得到:

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

更新

我用 32 位版本的 Windows 7 重新安装了机器,但奇怪的是我仍然收到此错误。唯一改变的是从 Windows Vista Business 迁移到 Windows 7 Professional。这会响铃吗?

【问题讨论】:

  • 我很久以前就遇到过这个问题,并认为我最终只是为我需要做的事情创建了一个自定义计数器,所以这没有帮助..但我可以说我没有在这种情况下,32 v 64 位的问题,所以你可能不值得追太久。
  • 谢谢吉姆,我开始认为我铺好机器并重新安装 x86 windows 比找到解决这个问题的方法更快!伤心。但确实如此。

标签: .net windows-7 .net-3.5 performancecounter


【解决方案1】:

这是由于性能计数器(或类别)not existing, 但有一个可怕的错误消息。

在perfmon中查看计数器,相关机器上应该没有它。

我发现 .Net 性能计数器有时会发生这种情况(不知道为什么),但 using lodctr1 会将它们恢复。如果您指出您尝试使用哪个性能计数器,我们可能会为您提供更多帮助。

  1. 请注意,内衬示例适用于 .Net 1.1,请针对不同的框架进行相应调整。

【讨论】:

  • 我正在使用 .Net 4.0.30319。我尝试使用 lodctr(使用 v4 设置),但问题仍然存在。我在这里上传了我的错误消息的屏幕截图:imgur.com/eJ4uk
  • +1。从 .NET 2.0 开始,对于不存在的计数器,我收到相同的错误消息。
  • 我也有像 robasta 一样的问题。请您建议任何其他方式,如果您需要任何其他详细信息,例如事件错误日志,请告诉我们,
  • 当一些自定义性能计数器丢失时,我在 .Net 4.5 中收到此错误消息。如果您要安装客户计数器,请确保它们安装正确。关闭并重新打开 PerfMon 以确保它们在那里。
  • 是的,需要先添加CounterDataCollection:PerformanceCounterCategory.Create(CategoryName, CategoryDe​​scription, PerformanceCounterCategoryType.SingleInstance, counterDataCollection);你可以在这里看到一个例子:dotnetcodr.com/2014/11/18/…
【解决方案2】:

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

I had to re-add them

lodctr /R
cd C:\Windows\Inf\.NETFramework
lodctr corperfmonsymbols.ini

【讨论】:

  • 我必须先使用 unlodctr 卸载性能计数器,如标记答案中所述。
【解决方案3】:

我在这个问题上花了好几个小时,按照网上找到的所有说明,所以我决定分享我的解决方案,也许它会为其他人节省一些时间。 最后我在cmets中的一个链接下得到了提示:

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

我的应用程序正在将 MassTrasit 与 RabbitMQ 结合使用,但无法将消息发送到队列。显然,它在后台添加了一些性能计数器,并且在没有管理员权限的情况下失败,并出现了非常描述性的错误。 有趣的是,您只需要第一次以管理员身份运行它(这就是欺骗我的原因)。

【讨论】:

    【解决方案4】:

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

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

    所以我在服务器上安装了 VS 并进行了调试,发现 我一直在未正确执行的异步操作中调用不可等待的 Linq 查询,因此应用程序线程中存在错误, 当有很多站点访问者时,会出现此错误,并且 IIS 会抛出此异常并停止工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 2013-02-28
      • 2012-12-13
      • 2013-01-03
      • 2021-10-06
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      相关资源
      最近更新 更多