以编程方式读取 w3wp .Net 性能计数器实例

Posted

技术标签:

【中文标题】以编程方式读取 w3wp .Net 性能计数器实例【英文标题】:Reading w3wp .Net Performance Counter Instances programmatically 【发布时间】:2016-06-28 09:48:49 【问题描述】:

使用性能工具查看 .Net 性能计数器时,我可以看到列出的 Web 进程性能计数器(w3wp、w3wp#1):

但是,当我以管理员身份运行以下代码时:

var instanceNames = new PerformanceCounterCategory(".NET CLR Memory")
                     .GetInstanceNames()
                     .OrderBy(x => x);

foreach (var name in instanceNames)

    Console.WriteLine(name);

这是我看到的输出:

请注意 w3wp 计数器未列出。有谁知道为什么会这样以及我该如何解决?

【问题讨论】:

【参考方案1】:

解决方案是您必须以与您的网站相同的位数运行应用程序。由于我的网站是 64 位的,我需要以 64 位模式运行控制台应用程序。为此,请右键单击控制台应用程序项目,单击“构建”选项卡中的属性,取消选中“首选 32 位”框。

此外,当您使用 .NET CLR 内存类别中的进程 ID 计数器收集 w3wp 进程的进程 ID 时,它从零开始。要获取进程 ID,您必须初始化网站并确保至少发生一次垃圾收集。由于这是在我的测试代码中,我可以简单地在 Application_Start 处理程序中调用 GC.Collect

【讨论】:

以上是关于以编程方式读取 w3wp .Net 性能计数器实例的主要内容,如果未能解决你的问题,请参考以下文章

.net 性能计数器 - 进程(w3wp)\% 处理器时间

在性能监视器中连接网站其 w3wp#X 进程

如何以编程方式记录 PerformanceCounter

跨应用域回收使用自定义性能计数器

以编程方式将 IIS 应用程序池标识“用户”分配给组

为啥我的 ASP.NET MVC 多实例性能计数器不起作用