c# - 列出一个类别的所有性能计数器

标签 c# performance performancecounter

System.Diagnostics 中是否有内置方法来检索给定类别名称的所有实例化性能计数器?

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

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

最佳答案

试试这个:

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

您必须了解可以有多个实例的类别,并以稍微不同的方式处理这些类别。

关于c# - 列出一个类别的所有性能计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1304949/

相关文章:

performance - 有没有工具可以测量 C 程序中的所有缓存级别?

.net - 什么是性能计数器?

c# - 如何使用性能计数器获取进程正在运行的线程数?

c# - 检索在选项集字段中选择的值并在文本字段中显示其值

c# - HiddenField.value 在 JS 中未定义

performance - Apache 可以处理多少连接/多少带宽?

performance - 类的 operator() 或将函数绑定(bind)为仿函数?

c# - 处理使用 MAF 创建的插件 (System.AddIn)

c# - 如何访问 .URL 文件中的 URL 和书签标题?

c - ARM M4 每周期指令 (IPC) 计数器