List all performance counters for a category

◇◆丶佛笑我妖孽 提交于 2019-11-27 06:10:25

问题


Is there a built-in method in System.Diagnostics for retrieving all of the instantiated performance counters for a given CategoryName?

We have a number of multi threaded apps using custom performance counters and now need to add a dashboard for displaying the performance statistics.

I'd like to make the dashboard in such a way that it does not need to be updated whenever someone adds a new counter to a new piece of code.


回答1:


Try this:

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

You have to be aware of categories that can have multiple instances and deal with those slightly differently.




回答2:


Just for fun.. here's the same thing in 1 line of 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))


来源:https://stackoverflow.com/questions/1304949/list-all-performance-counters-for-a-category

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!