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

本文关键字:W3wp 获取 性能计数器 中的 | 更新日期: 2023-09-27 18:26:49

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

所以我写了一个小控制台,向我展示了所有可能与w3wp有关联的Categories,我只看到Process和Thread。

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

我错过了什么?

        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;
                    }
                }
            }
        }

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

您必须以与网站相同的比特率运行应用程序。如果你的网站是64位的,那么你需要在64位模式下运行应用程序。

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

有关详细信息,请参阅以编程方式读取w3wp.Net性能计数器实例。