c# - 最简单的性能计数器示例

标签 c# performancecounter

启动和运行性能计数器所需的最少 C# 代码量是多少?

我只想测量代码中两点之间的 CPU 周期数和/或时间。我已经浏览了网络上所有的华夫饼,但似乎比这样一个微不足道的任务所需的代码要多得多。我只想快速启动并运行测量,并更加专注于我正在做的事情。

最佳答案

我认为您不需要性能计数器。您需要的时间不只是可以从 StopWatch 获得的时间吗? ?它非常准确。

Stopwatch watch = Stopwatch.StartNew();

// Do work

watch.Stop();
// elapsed time is in watch.Elapsed

但是,要回答你实际提出的问题:如果你只是想查询现有的计数器,其实很简单。这是一个完整的例子:

using System;
using System.Diagnostics;
using System.Linq;

static class Test
{
    static void Main()
    {
        var processorCategory = PerformanceCounterCategory.GetCategories()
            .FirstOrDefault(cat => cat.CategoryName == "Processor");
        var countersInCategory = processorCategory.GetCounters("_Total");

        DisplayCounter(countersInCategory.First(cnt => cnt.CounterName == "% Processor Time"));
    }

    private static void DisplayCounter(PerformanceCounter performanceCounter)
    {
        while (!Console.KeyAvailable)
        {
            Console.WriteLine("{0}\t{1} = {2}",
                performanceCounter.CategoryName, performanceCounter.CounterName, performanceCounter.NextValue());
            System.Threading.Thread.Sleep(1000);
        }
    }
}

当然,该进程需要适当的权限才能访问您需要的性能计数器。

关于c# - 最简单的性能计数器示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3896685/

相关文章:

c# - 我的进程的CPU消耗

c# - 我怎么知道协程是否仍然是 "waiting"?

c# - 我们如何在将数据绑定(bind)到 Windows Phone 中的文本 block 时处理空值

c# - RateOfCountsPerSecond32 类型的计数器始终显示 0

linux - 是否有解释 linux 性能计数器的好资源?

c++ - union 对象就像一个结构

c# - 创建 EntityObject 子类的浅拷贝/克隆

c# - 计算三角形的面积

具有动态接口(interface)的 C# COM 对象

linux - 哪些性能事件可以使用 PEBS?