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

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

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

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

foreach (var name in instanceNames)
{
    Console.WriteLine(name);
}


这是我看到的输出:

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

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

最佳答案

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

同样,当您使用.NET CLR内存类别中的“进程ID”计数器收集w3wp进程的进程ID时,其开头为零。要获取进程ID,您必须初始化网站并确保至少进行一次垃圾回收。就像在测试代码中一样,我可以在GC.Collect处理程序中简单地调用Application_Start

关于c# - 以编程方式读取w3wp .Net性能计数器实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38072766/

10-09 01:59