VisualStudio中自带有Profile工具进行性能性能分析,其中用得比较多的数据是函数调用时间,它主要有独占样本数和非独占样本数两个指标,关于这两个指标代表的意义,MSDN的解释比较文艺:

  • 非独占样本数: 为函数收集的性能数据的总数,其中包括该函数调用的其他函数的性能数据。
  • 非独占转换次数: 在此函数(包括此函数调用的函数)的所有实例中发生操作系统(转换)事件的次数。

其它性能数据解释可以参看:http://msdn.microsoft.com/zh-cn/library/ms242747(v=vs.90).aspx。

当然,就算看不懂两个数据表示的具体意义也无碍于我们分析性能瓶颈,反正数值大的肯定是性能瓶颈。不过,为了更好的使用这个工具,还是稍微理解点的好。

为了通俗的解释这两个指标,我这里写了两个简单的函数Foo1和Foo2,其中Foo1调用了Foo2,其它的函数体是一样的。

static void Foo1()
    {
        var total = 0;
        for (int i = 0; i < 10000 * 10000; i++)
        {
            total += i;
        }

Foo2();
    }

static void Foo2()
    {
        var total = 0;
        for (int i = 0; i < 10000 * 10000; i++)
        {
            total += i;
        }
    }

我们的调用方式如下:

static void Main(string[] args)
    {
        System.Threading.Thread.Sleep(2000);        //等待采集器启动需要一段时间
        Foo1();
    }

此时生成的性能报告如下:

函数名

非独占样本数

独占样本数

非独占样本数百分比

独占样本数百分比

ConsoleApplication1.Program.Foo1

526

289

99.81

54.84

ConsoleApplication1.Program.Foo2

237

237

44.97

44.97

对于Foo2,它的独占样本数和非独占样本数是一样的;而对于Foo1它的非独占样本数是独占样本数的两倍。

从中可以看出:

  • 非独占样本数是指的包括了子函数执行时间的总执行时间
  • 独占样本数是不包括子函数执行时间的函数体执行时间

如果把Main函数的采集数据放在一起就更容易理解了:Main函数独占样本数百分比为0,因为它的函数体执行时间几乎忽略不计,而非独占样本数百分比为100%,因为它在整个进程的生命周期内都存在。

函数名

非独占样本数

独占样本数

非独占样本数百分比

独占样本数百分比

ConsoleApplication1.Program.Foo1

526

289

99.81

54.84

ConsoleApplication1.Program.Foo2

237

237

44.97

44.97

ConsoleApplication1.Program.Main

527

0

100

0

转载于:https://www.cnblogs.com/TianFang/archive/2012/11/18/2776266.html

关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义相关推荐

  1. App性能分析数据监控

    App性能分析数据监控 APP的性能监控包括: CPU 占用率.内存使用情况.网络状况监控.启动时闪退.卡顿.FPS.使用时崩溃.耗电量监控.流量监控等等. 文中所有代码都已同步到github中,有兴 ...

  2. 如何对一个变量数据进行正则判定_生存分析数据中的BuckleyJamesMultipleRegression Model...

    一.模型简介 目前,生存分析领域,最常用的是Cox比例风险回归模型,该模型具有良好的特性,不仅可以分析各种自变量对生存时间的影响,而且对基准风险分布不作任何要求(半参数模型).Cox模型使用时要满足一 ...

  3. Python性能分析指南——中

    程序使用了多少内存? 现在我们对计时有了较好的理解,那么让我们继续弄清楚程序使用了多少内存.我们很幸运,Fabian Pedregosa模仿Robert Kern的line_profiler实现了一个 ...

  4. linux中top性能分析工具中的TIME+

    简言 1. top命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到现在的时间 2. 因此,如果一个进程使用的cpu很少,那即使这个进程已经存在很长时间,TIME/TIME+也是很 ...

  5. spark DataFrame 根据条件替换数据中的值,并保留非条件的原始值

    otherwise子句不但能接收固定的值,还可以接收原来的列,保留列中原始的数据.如下: dataF.withColumn("newColumnName",when(col(&qu ...

  6. Graphic32中TBitmap32.TextOut性能分析[转载]

    转载:http://blog.csdn.net/avan_lau/article/details/6958497 最近在分析软件中画线效率问题,发现在画一些标志性符号的方法,存在瓶颈,占用较大的时间. ...

  7. jq 直接调用php文件_PHP性能分析工具,你在用哪一个?

    PHP性能分析工具,小编一直都在用这个:Xhprof , 今天给大家介绍一下如何安装与如何使用,注意事项等!也许你会用得着的. 什么是Xhprof Xhprof是一个轻量级的分层性能测量分析器.在数据 ...

  8. Linux性能分析命令工具汇总

    转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...

  9. Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化

    拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...

  10. Linux sar性能分析

    2019独角兽企业重金招聘Python工程师标准>>> Linux使用sar进行性能分析 sar简介 sar命令常用格式 sar常用性能数据分析 整体CPU使用统计-u 各个CPU使 ...

最新文章

  1. CCNA题库关于Frame-relay看图答题的解答
  2. 数组字符串转化成数组与eval函数
  3. 公众号知道我浏览他吗_公众号可以看到访客吗,公众号怎么看到访客
  4. asp.net core mvc View Component 应用
  5. 找出最大值和最小值(算法导论第三版9.1-2)
  6. 手机促销活动页面怎么设计?有了全面的模板,简单了
  7. HTML中name与id的区别
  8. Python风格总结:if语句
  9. Q121:PBRT-V3,光传播方程(The Light Transport Equation)(14.4章节)
  10. 苹果手机耗电快_苹果手机耗电快怎么解决?我有2个小技巧能帮到你
  11. Web前端面试指导(十七):一个满屏 品 字布局 如何设计?
  12. java 登陆拦截器_java 登录拦截器
  13. 常用名词理解(APK,SDK,JDK,API,DLL)
  14. 港股历史行情数据 API 接口
  15. 计算机无法启动故障树,发动机无法启动的故障树分析及诊断方法.docx
  16. 数据结构-九宫格(回溯法)
  17. centos 7重置密码
  18. postman接口工具-Invalid URI http:///%7B%7Burl%7D%7Dapi/document/getHelpDocumentUrl?appType=1
  19. 推荐给中学生的数学课外书:《几何原本》
  20. Google I/O 2014? No,Android I/O 2014

热门文章

  1. Android开源项目推荐之「网络请求哪家强」
  2. 现在学python2还有意义吗_现在学python该学python2还是python3?
  3. linux中级之ansible配置(roles)
  4. 部分手机浏览器存在将ajax请求当成广告过滤的情况,及解决方案
  5. python基础之Day20part1
  6. 【9108】模拟数学计算器
  7. 无交换机实现集群网络互联
  8. ios开发之CoreData使用
  9. 制作验证码使用到的函数
  10. 各种学习网站博客汇总(持续添加中。。。)