【问题标题】:List all performance counters for a category列出一个类别的所有性能计数器
【发布时间】:2010-11-21 06:07:28
【问题描述】:

System.Diagnostics 中是否有用于检索给定 CategoryName 的所有实例化性能计数器的内置方法?

我们有许多使用自定义性能计数器的多线程应用程序,现在需要添加一个仪表板来显示性能统计信息。

我想以这样一种方式制作仪表板,以便在有人向新代码段添加新计数器时不需要更新它。

【问题讨论】:

    标签: c# performance performancecounter


    【解决方案1】:

    试试这个:

    public void ListCounters(string categoryName)
    {
        PerformanceCounterCategory category = PerformanceCounterCategory.GetCategories().First(c => c.CategoryName == categoryName);
        Console.WriteLine("{0} [{1}]", category.CategoryName, category.CategoryType);
    
        string[] instanceNames = category.GetInstanceNames();
    
        if (instanceNames.Length > 0)
        {
            // MultiInstance categories
            foreach (string instanceName in instanceNames)
            {
                ListInstances(category, instanceName);
            }
        }
        else
        {
            // SingleInstance categories
            ListInstances(category, string.Empty);
        }
    }
    
    private static void ListInstances(PerformanceCounterCategory category, string instanceName)
    {
        Console.WriteLine("    {0}", instanceName);
        PerformanceCounter[] counters = category.GetCounters(instanceName);
    
        foreach (PerformanceCounter counter in counters)
        {
            Console.WriteLine("        {0}", counter.CounterName);
        }
    }
    

    您必须注意可能有多个实例的类别并以稍有不同的方式处理这些实例。

    【讨论】:

      【解决方案2】:

      只是为了好玩.. 这是 1 行 linq 中的相同内容:

      PerformanceCounterCategory
      .GetCategories()
      .Where(cat => cat.CategoryName == "ASP.NET v4.0.30319")
      .Select (cat => cat.GetInstanceNames().Any() ? cat.GetInstanceNames().Select (i => cat.GetCounters(i)).SelectMany (counter => counter) : cat.GetCounters("")).SelectMany (counter => counter)
      .Select(counter => string.Format("{0} : {1}.{2}", counter.InstanceName , counter.CategoryName, counter.CounterName))
      

      【讨论】:

      • 调用 cat.GetInstanceNames() 很慢,你应该做一个“让变量”来获取列表,并在以后重用它
      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多