以编程方式读取 w3wp .Net 性能计数器实例
Reading w3wp .Net Performance Counter Instances programmatically
使用性能工具查看 .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 计数器。有谁知道为什么会这样以及我该如何解决?
解决方案是您必须 运行 应用程序的位数与您的网站相同。由于我的网站是 64 位的,因此我需要 运行 控制台应用程序处于 64 位模式。为此,右键单击控制台应用程序项目,单击“构建”选项卡中的“属性”,取消选中显示 "Prefer 32-bit".
的框
此外,当您使用 .NET CLR 内存类别中的进程 ID 计数器收集 w3wp 进程的进程 ID 时,它一开始是零。要获取进程 ID,您必须初始化网站并确保至少进行一次垃圾收集。由于这是在我的测试代码中,我可以简单地在 Application_Start
处理程序中调用 GC.Collect
。
使用性能工具查看 .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 计数器。有谁知道为什么会这样以及我该如何解决?
解决方案是您必须 运行 应用程序的位数与您的网站相同。由于我的网站是 64 位的,因此我需要 运行 控制台应用程序处于 64 位模式。为此,右键单击控制台应用程序项目,单击“构建”选项卡中的“属性”,取消选中显示 "Prefer 32-bit".
的框此外,当您使用 .NET CLR 内存类别中的进程 ID 计数器收集 w3wp 进程的进程 ID 时,它一开始是零。要获取进程 ID,您必须初始化网站并确保至少进行一次垃圾收集。由于这是在我的测试代码中,我可以简单地在 Application_Start
处理程序中调用 GC.Collect
。