PerfView系列之探究cpu爆高原因
-
今天我们用PerfView来探究一下程序cpu爆高的原因,首先构建一个模拟cpu爆高的程序
internal class Program { static void Main(string[] args) { Task.Run(() => Test1()); //Test1 故意死循环 Task.Run(() => Test2()); //Test2 是一个正常函数 Console.WriteLine("我是主线程!"); Console.ReadLine(); } static void Test1() { var i = 10; var b = true; while (i > 0) { b = !b; } } static void Test2() { for (int i = 0; i < 10000; i++) { var j = string.Join(",", Enumerable.Range(0, 100)); } Console.WriteLine("Test2执行结束"); } } -
打开 PerfView,并设置要指定运行的程序,并且设置1ms对cpu进行采样一次,采样总时长为15秒
-
设置好后点击
Run Command开始采样,主界面会卡住一段时间,耐心等待采样结束即可 -
采样结束后,左侧的资源列表中会出现一个
PerfViewData.etl.zip,双击打开后再双击打开CPU Stacks -
双击
CPU Stacks之后会出现一个弹窗,列出所有的进程的CPU运行相关信息,找到我们模拟的那个进程(一般第一个)并再次双击 -
在这个弹窗中,我们就能看到导致CPU爆高的热点函数
-
![]()
-
可以看出,
simulatecpuhighusage!SimulateCpuHighUsage.Program.Test1()函数是导致cpu爆高的热点函数
-






浙公网安备 33010602011771号