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

99.81

54.84

ConsoleApplication1.Program.Foo2

44.97

44.97

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

从中可以看出:

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

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

函数名

非独占样本数

独占样本数

非独占样本数百分比

独占样本数百分比

ConsoleApplication1.Program.Foo1

99.81

54.84

ConsoleApplication1.Program.Foo2

44.97

44.97

ConsoleApplication1.Program.Main

 

关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义的更多相关文章

  1. 关于aws账单数据中几个重要的与费用相关的字段的意义分析

    今天在看aws账号的详细信息时,看到字段很多,大多数字段,根据名称可以知道代表的意义 对于如下几个字段的概念有点模糊(位于"UsageStartDate","UsageE ...

  2. 【转】Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    本文转自:http://www.wjdiankong.cn/wireshark%E5%92%8Cfiddler%E5%88%86%E6%9E%90android%E4%B8%AD%E7%9A%84tl ...

  3. android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...

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

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

  5. [Swift通天遁地]七、数据与安全-(15)使用单元测试进行代码的性能分析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. Java 性能分析工具 , 第 2 部分:Java 内置监控工具

    引言 本文为 Java 性能分析工具系列文章第二篇,第一篇:操作系统工具.在本文中将介绍如何使用 Java 内置监控工具更加深入的了解 Java 应用程序和 JVM 本身.在 JDK 中有许多内置的工 ...

  7. oracle11g的standby性能分析报告statpack安装

    一般常见的分析standby database的性能问题的方法就是通过动态性能视图来判断,从11g开始,随着Active Data Guard功能的出现,早期的Statspack 工具可以在stand ...

  8. VisualVM 性能分析概述

    VisualVM是一个免费的Java应用监控.分析工具. 简单说来,VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力.所有这些都是免费的!它囊括的命令行工具包括 ...

  9. PHP 性能分析第一篇: Xhprof & Xhgui 介绍

    [前言]这是国外知名博主 Davey Shafik所撰写的 PHP 应用性能分析系列的第一篇,阅读第二篇可深入了解 xhgui,第三篇则关注于性能调优实践. 什么是性能分析? 性能分析是衡量应用程序在 ...

随机推荐

  1. Logstash安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)

    前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticsearch-2.4.3的3节点安装(多种方式图文 ...

  2. 负载均衡LVS之DR(附:NFS共享存储) 五分钟搭建手册

    一:DR-模式 调度器Ip:192.168.1.254 服务器ip:192.168.1.1/192.168.1.2 VIP:192.168.1.10 ——配置负载均衡调度器: 关闭重定向响应配置: V ...

  3. ajax 两者有什么不同

    $.ajax({            type:"POST",            url:url,            //dataType:"json" ...

  4. Timer的缺陷

  5. 通过递归遍历n位2进制数的所有情况

    题目要求: 输入一个正整数m,输出m位2进制的所有取值情况,从小到大输出,每个输出结果用换行符分割. 解题思路: 通过递归调用,从第1个到第m个数组元素分别置0和置1,然后当从1到m所有的元素都置0或 ...

  6. 安装 SQL Server 2014 Express

    安装 SQL Server 2014 Express 我的电脑系统: Windows 10 64位 一 . 下载 安装Microsoft SQL Server 2014 Express 软甲下载地址: ...

  7. Luogu 2597 [ZJOI2012]灾难

    BZOJ 2815. 解法还是挺巧妙的. 放上写得很详细很好懂的题解链接  戳这里. 一个物种$x$如果要灭绝,那么沿着它的入边反向走走走,一定可以走到一个点$y$,如果这个点$y$的物种灭绝了,那么 ...

  8. Luogu 4159 [SCOI2009]迷路

    BZOJ 1297 应当是简单题. 发现边权的数量很小,所以我们暴力把一个点拆成$9$个点,然后把$(x, i)$到$(x, i + 1)$连边,代表转移一次之后可以走回来:对于每一条存在的边$(i, ...

  9. 专题1-MMU-lesson2-深入剖析地址转化

    1.地址转化总体分析 level one fetch和level two fetch分为一级转换和二级转换. 由上图右边可以看出,首先通过TTB(Translation Table Base)寄存器找 ...

  10. WEB测试和APP测试区别

    Web测试和App测试从流程上来说,没有区别.都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动.从技术上来说,WEB测试和APP测试其测试类型也基本相似,都需要进行功能测试.性 ...