在 c# 中从 W3wp 获取性能计数器

Posted

技术标签:

【中文标题】在 c# 中从 W3wp 获取性能计数器【英文标题】:Getting Performance Counters from W3wp in c# 【发布时间】:2015-12-15 14:19:23 【问题描述】:

我想从 W3WP (IIS 10.0) 进程中检索性能计数器。我,能够读取进程和线程性能计数器,但不能读取任何其他类似 % Time 花在 GC 中的时间

所以我写了一个小控制台,显示所有可能与 w3wp 有关联的类别,我只看到进程和线程。

我还以管理员身份和运行应用程序池的用户身份运行控制台。但结果还是一样。

我错过了什么?

        var cats = PerformanceCounterCategory.GetCategories();

        foreach (var cat in cats)
        

            var names = cat.GetInstanceNames();

            if (names.Any(i => i.ToLowerInvariant().Contains("w3wp")))
            
                Console.WriteLine(cat.CategoryName);
            
        



        private static string GetProcessInstanceName(int pid)
        
            PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");

            string[] instances = cat.GetInstanceNames();
            foreach (string instance in instances)
            

                using (PerformanceCounter cnt = new PerformanceCounter("Process",
                     "ID Process", instance, true))
                
                    int val = (int)cnt.RawValue;
                    if (val == pid)
                    
                        return instance;
                    
                
            
        

【问题讨论】:

【参考方案1】:

您必须以与您的网站相同的位数运行该应用程序。如果您的网站是 64 位的,那么您需要以 64 位模式运行应用程序。

要执行此操作,请右键单击控制台应用程序项目,单击“构建”选项卡中的属性,取消选中“首选 32 位”框。

请参阅Reading w3wp .Net Performance Counter Instances programmatically 了解更多信息。

【讨论】:

以上是关于在 c# 中从 W3wp 获取性能计数器的主要内容,如果未能解决你的问题,请参考以下文章

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

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

无法使用 c# 获取特定于 SSAS 的性能计数器类别

C# 利用性能计数器监控网络状态

C# 不提供 Windows 性能计数器(在 Azure 辅助角色上)

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