使用VS的性能分析工具来分析代码的性能瓶颈问题(1) CPU采样

勇哥注:
一般我们通过使用windows的任务管理器来分析软件的性能问题。
通过cpu占用率、cpu时间、线程数量、句柄数量几个关键参数来分析软件存在的内在泄露、暴句柄、吃cpu等等问题。
这里我们来研究一下vs自带的性能分析工具,勇哥之前也没有接触过。因此此篇我与大家共同学习。


(一)先看下怎么启用vs的性能分析工具。


首先,调试菜单选择“性能探查器"。

image.png

点击 之后会出现下面的界面。

image.png


这里可以选择分析现有项目,还是分析其它项目或者其它可执行文件。若是分析其它项目我们选择 “更改目标” 按钮如下图所示:

image.png

选择可执行文件,然后点击开始,弹出以下界面:

image.png


(二)来段有问题的代码,使用“CPU采样“。

分析目标为”启动项目“。


image.png

这个小测试程序当中勇哥故意弄了一个timer,但是错误的让它陷入了死循环。

 private void timer1_Tick(object sender, EventArgs e)
 {

   while(true)
   {
     RtbMsg.AppendText($"{Thread.CurrentThread.ManagedThreadId}\n");
   }
 }


程序启动后,由于timer卡死了ui,点关闭窗体是无效的,并且被windows强制退出了。


然后等一段时间,性能分析器分析出了结果。

image.png

此结果中,勇哥一眼就看到了一个方法AppendText() 占用了cpu的18464毫秒,总计93.11%的时间。

image.png

鼠标置于方法名上面,出现树型图标image.png,我们点击进去,可以查看调用堆栈的情况。


通过三个窗口: 调用者、当前函数、调用堆栈,可以依次点击,最终定到代码段 timer1_Tick,

此函数是占用cpu时间最多。

最下面的代码窗口,还定位到了具体的行号。

image.png


如果要看更详细的信息,点击“创建详细的报告”。

image.png


稍等一会,产生的报告如下图所示:

这份报告中,我们更容易看到耗cpu时间最多的方法是 AppendText。占比98.03%

image.png

独占:指该函数中不包含子函数的执行时间;
非独占(即分摊):指包含子函数执行时间的总执行时间。

上面解释如果不明白,勇哥拿房产面积来讲。
一套房的面积为:套内面积+分摊面积,套内面积是独占面积,分摊面积即非独占面积。
所以非独占即是分摊。

因此我们看一个函数占用cpu时间多不多,应该看它的独占样本。



这里我们可以看到哪些函数占用的cpu比较多,函数的调用过程是怎样的,如果想看某个函数直接点击函数名,看函数的详细信息,我们可以根据语句执行的执行效率来进行针对性的修改,如下图:


image.png




--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年5月    »
12345
6789101112
13141516171819
20212223242526
2728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864