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

时间:2015-12-15 14:19:23

标签: c# iis performancecounter w3wp

我想从W3WP(IIS 10.0)进程中检索性能计数器。我能够读取进程和线程性能计数器,但不能读取在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 个答案:

答案 0 :(得分:1)

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

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

有关详细信息,请参阅Reading w3wp .Net Performance Counter Instances programmatically