c# - PerformanceCounter.NextValue() 抛出 InvalidOperationException

标签 c# iis-7.5 windows-server-2008-r2 performancecounter invalidoperationexception

这是创建性能计数器的代码:

var ftpPerfCounter = new PerformanceCounter("FTP Service", "Current Connections", "_Total");

这是异常发生的地方:

int cnt = (int)Math.Round(ftpPerfCounter.NextValue());

这是异常消息:

"Error Message: The Counter layout for the Category specified is invalid, a counter of the type: AverageCount64, AverageTimer32, CounterMultiTimer, CounterMultiTimerInverse, CounterMultiTimer100Ns, CounterMultiTimer100NsInverse, RawFraction, or SampleFraction has to be immediately followed by any of the base counter types: AverageBase, CounterMultiBase, RawBase or SampleBase."

错误消息非常隐晦。我不确定将来可以做些什么来避免异常。

详细信息

这发生在 Windows Server 2008 R2 64 位操作系统上。 FTP 服务器是 IIS。

最佳答案

至少在我的带有 IIS 7.5 的 Windows Server 2008 R2 上,性能计数器类别称为“Microsoft FTP 服务”而不是“FTP 服务”。可能不同的 OS/IIS 版本不同,但很容易检查。

在您的目标服务器/机器上:

  1. 运行“性能监视器”
  2. 点击左侧导航 Pane 中的“性能监视器”
  3. 点击加号图标添加性能计数器
  4. 向下滚动可用计数器列表。查找 FTP 或 Microsoft FTP 以查看它是否存在...请注意,如果您没有安装 Microsoft FTP 服务,您将看不到性能计数器。
  5. 找到后,选择它,您将看到可以查询的特定计数器实例的列表。其中一个实例是您感兴趣的“_Total”。

当然这也证明性能计数器独立于你的代码工作。这是一件好事!

有关如何使用 Performance Counters in C#/.NET see this stackoverflow post 的具体最佳实践.

关于c# - PerformanceCounter.NextValue() 抛出 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739842/

相关文章:

sql-server - 无法将用户添加到 SQL Server 2012 数据库

c# - 在 C# 中以异步方式发送 5000 条消息

visual-studio-2010 - 无法加载“Microsoft.VisualStudio.Diagnostics.ServiceModelSink.Behavior”

asp.net - 使用 umbraco 的 iis 应用程序池过度使用内存

iis - 为什么 IIS7 缺少 HTTP_REFERER 服务器变量?

dotnetnuke - 正如 DotNetNuke 文档中所建议的那样,从 UNC 共享运行 IIS Web 应用程序有什么不好?

c# - WCF Com Interop GetRecordInfoFromGuids 返回旧格式或无效类型库

c# - 使用 select 和 bool 数组过滤字符串数组

c# - System.Data.dll 中发生“System.Data.SqlClient.SqlException”

windows - 如何将 MS .NET Framework 4 添加到 Windows Server 更新服务?