《编程珠玑(续)》第一章中就介绍了性能监视工具,对于较简单的程序来说,性能监视工具其实可以用变量累加来计算的,但是对于较复杂的程序来说就需要比较好的性能监视工具了。而VS2010提供了一个性能监视工具,虽然我没有写过大型的程序,但是感觉还是很高大上的!

性能监视工具的打开:Analyze->Launch Performace Wizard,选择CPU  Simpling,对于可执行程序来说,选择An executable(.EXE file)。输入完整的.exe文件路径,然后点击Finish即可。

需要注意的是这个分析表时由CPU采样得到的,这样你的程序如果执行特别快,还没有来得及采样就结束了,那么就不能得到这个分析报告了,因此,如果执行时间过短时,需要循环执行多次来分析程序的性能指标。

基本概念

性能会话   可使用“性能探查器”创建性能会话,会话中包含配置数据,用于收集性能信息以及一次或多次分析运行的结果。 创建性能会话之后,“性能资源管理器”窗口中将显示该会话。

  1. 分析会话的名称。

  2. Targets 文件夹显示在会话中分析的项目或二进制文件。

  3. Reports 文件夹包含一次或多次收集运行的分析数据文件。 您可以单击某个文件名,并选择性能信息(如函数调用、内存分配以及特定函数的详细信息)的视图。 每个视图都显示在 Visual Studio 主窗口中。

采样方法    “采样”是一种统计分析方法,用于显示执行应用程序中大多数用户模式工作的函数。 若要加快应用程序的运行速度,可先从采样这一块下手。

“采样”方法将按指定时间间隔收集在应用程序中执行的函数的相关信息。 完成分析运行后,Visual Studio 主窗口中将显示分析数据的“摘要”视图。 “摘要”视图将显示最活跃函数的调用树(称为“热路径”,在其中执行了应用程序中的大多数工作),此外,还将列出执行单个工作最多的函数,并提供一个可用于重点显示采样会话特定段的时间线图。

开始分析之前,可执行以下操作,以确保不会遇到不必要的问题。

以管理员身份运行   如果您不是所用计算机上的管理员,则应以管理员身份运行 Visual Studio,以确保具有使用分析工具中的某些功能所必须具有的权限。 为实现此目的,请单击“开始”按钮,找到 Visual Studio 应用程序图标,右击该图标,然后单击“以管理员身份运行”。

将活动生成配置设置为“发布”   调试版本会向应用程序中插入附加诊断代码,但它不包括编译器在发布版本中执行的优化。 分析应用程序的发布版本可以提供有关应用程序性能的更准确的数据。 若要更改活动配置,请在“生成”菜单上单击“配置管理器”,然后在该对话框中的活动解决方案配置下选择“发布”。

获取 Windows 符号文件   如果分析调用 Windows 函数的代码,应确保具有最新的 .pdb 文件。 如果没有这些文件,报告视图中列出的 Windows 函数名称会比较晦涩难懂。 有关如何确保具有所需文件的更多信息,请参见如何:引用 Windows 符号信息

若要获取需要分析的数据,必须先创建性能会话,然后运行该会话。 利用“性能向导”可执行这两项操作。

创建并运行性能会话

  1. 在 Visual Studio 中打开解决方案。

  2. 在“分析”菜单上,单击“启动性能向导”。

  3. 接受“CPU 采样(建议)”的默认设置,然后单击“下一步”。

  4. 接受默认项目,然后单击“下一步”。

  5. 请确保选中了“在向导完成后启动分析”复选框,然后单击“完成”。

    此时将启动应用程序,探查器开始收集数据。

  6. 练习可能包含性能问题的功能。

  7. 采用通常的做法关闭应用程序。

    应用程序运行完成后,Visual Studio 主窗口中将显示分析数据的“摘要”视图,“性能资源管理器”窗口中将显示新会话的图标。

运行完性能会话后,Visual Studio 主窗口中将显示分析报告的“摘要”视图。

建议在数据分析的开始阶段,使用“摘要时间线”依次检查“热路径”、执行最多工作的函数的列表,最后集中检查其他函数。 您还可以在“错误列表”窗口中查看分析建议和警告。

请注意,采样方法可能无法提供您所需的信息。 举例来说,只有当应用程序执行用户模式代码时才会收集样本。 因此,某些功能(如输入和输出操作)不会被采样捕获。 分析工具提供了多种收集方法,可使您重点收集重要的数据。 有关其他方法的更多信息,请参见如何:选择收集方法

图中每个带编号的区域都与过程中的某个步骤相关。


分析采样数据

  1. 在“摘要”视图中,“热路径”显示应用程序调用树中具有最高非独占样本的分支。 它是收集数据时最活跃的执行路径。 高非独占值可表示可以优化生成调用树的算法。 查找位于路径最低级别的代码中的函数。 注意,路径也可以包含系统函数或外部模块中的函数。

    1. “非独占样本数”指示该函数及其调用的任何函数所执行的工作量。 高非独占计数指向整体消耗资源最多的函数。

    2. “独占样本数”指示函数体中的代码执行的工作量(不包括该函数调用的函数所执行的工作量)。 高独占计数可能表示函数本身存在性能瓶颈。

  2. 单击函数名称可显示分析数据的“函数详细信息”视图。 “函数详细信息”视图以图形方式呈现所选函数的分析数据,并显示调用该函数的所有函数以及所选函数调用的所有函数。

    • 调用函数和被调用函数的块的大小表示函数调用或被调用的相对频率。

    • 单击调用函数或被调用函数的名称可使其成为“函数详细信息”视图中的所选函数。

    • “函数详细信息”窗口的下半部分窗格显示函数代码本身。 如果检查代码时发现可以优化其性能,请单击源文件的名称,以在 Visual Studio 编辑器中打开该文件。

  3. 若要继续进行分析,请从“视图”下拉列表中选择“摘要”以返回“摘要”视图。 然后检查“执行单个工作最多的函数”中的函数。 此列表显示具有最高独占样本的函数。 这些函数的函数体中的代码执行了大量工作,并且您可以对它进行优化。 若要进一步分析某个特定函数,请单击函数名称以在“函数详细信息”视图中显示该函数。

    若要继续研究分析运行,可以通过使用“摘要”视图中的时间线显示某段分析数据中的“热路径”和“执行单个工作最多的函数”,以重新分析所选段。 例如,如果重点显示时间线中某个较小的峰值,则可能会显示耗费大量资源的调用树和函数,这些调用树和函数未在整个分析运行的分析中显示。

    若要重新分析某段,请在“摘要时间线”框中选择该段,然后单击“按选定内容筛选”。

  4. 探查器还使用一组规则来建议改进分析运行的方法,并标识可能的性能问题。 如果发现了问题,则会在“错误列表”窗口中显示警告。 若要打开“错误列表”窗口,请在“视图”菜单上单击“错误列表”。

    • 若要查看引发了警告的函数,则在“函数详细信息”视图中双击该警告。

    • 若要查看有关该警告的详细信息,则右击该错误,然后单击“显示错误帮助”。

找到并优化一个或多个函数后,可以重复分析运行,并比较数据以了解所做更改对应用程序性能的影响。

修改代码并重新运行探查器

  1. 更改代码。

  2. 若要打开“性能资源管理器”,请在“视图”菜单上单击“其他窗口”,然后单击“性能资源管理器”。

  3. 在“性能资源管理器”中,右击要重新运行的会话,然后单击“启动并启用分析功能”。

  4. 在重新运行会话之后,将向“性能资源管理器”中该会话的“Reports”文件夹添加另一个数据文件。 同时选择原始分析数据和新分析数据,右击所选内容,然后单击“比较性能报告”。

    此时将打开一个新的报告窗口,其中显示比较的结果。 有关如何使用比较视图的更多信息,请参见如何:比较探查器数据文件

VS2010性能监视工具的更多相关文章

  1. VS2010编译器工具cl对c++11标准支持情况測试

    本文探讨了VS2010编译工具cl对C++11标准的支持情况.提供了利用C++11新特性的两段代码来进行測试,并同g++ 4.9.3编译器的编译情况相对照.总的说来:VS2010的编译器工具cl部分支 ...

  2. 分布式系统的应用程序性能监视工具,专为微服务、云本机架构和基于容器(Docker、K8s、Mesos)架构而设计。 SkyWalking

    Apache SkyWalking™ | SkyWalking Teamhttp://skywalking.apache.org/zh/ Application performance monitor ...

  3. linux性能监视工具sar

    sar是一个优秀的一般性能监视工具,它可以输出Linux所完成的几乎所有工作的数据.sar命令在sysetat rpm中提供.示例中使用sysstat版本5.0.5,这是稳定的最新版本之一.关于版本和 ...

  4. VS2010中“工具>选项中的VC++目录编辑功能已被否决”解决方法

    转自:http://blog.csdn.net/chaijunkun/article/details/6658923 这是VS2010的改变,不能够在“工具-选项”中看到“VC++目录”了. 但是呢, ...

  5. VS2010开发工具使用技巧<之简单讲解>

    俗语云:工欲善其事必先利其器! 1.代码放大 效果:放大前----------------------------------------------------------------->放大 ...

  6. VS2010编译Boost 1.57 静态链接库

    http://www.cnblogs.com/cuish/p/4175491.html 0.前提 Boost库版本 1.57.0 下载地址 http://www.boost.org/users/his ...

  7. 通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译

    本文内容中的部分资料和知识来源于网络,具体引用出处不明. VS的IDE从VC6到VS2010的变化可谓是天翻地覆,最新的VS2010有一个特性就是支持多显示器开发,这无疑为我们的开发带来很大的便利. ...

  8. VS2010链接TFS

    VS2010链接TFS源代码管理器 1.打开VS2010开发工具. 2.菜单视图===>>团队资源管理器 3.点击链接到团队项目 4.点击服务器 5.点击添加 6.输入TFS服务配置信息 ...

  9. DirectX 9 SDK安装后在vs2010里编译BaseClasses出错问题解决方法

    打开你的dx的sdk安装目录,例如: D:/DX90SDK/Samples/C++/DirectShow/ 这里就有一个叫baseclasses的工程,为安全起见,请先备份此工程. 1,双击basec ...

随机推荐

  1. oracle优化辅助SQL语句

    --查询正在执行的SQL语句 select a.program, b.spid, c.sql_text,c.SQL_FULLTEXT,c.SQL_ID from v$session a, v$proc ...

  2. VsFTP+本地文件认证+SSl实现虚拟用户配置

    1.实验环境: [root@node21 ~]# cat /etc/centos-release CentOS release 6.8 (Final) [root@node21 ~]# uname - ...

  3. Kinect For Windows V2开发日志一:开发环境的配置

    算是正式进军Kinect了,前段时间学的东西现在就忘了,于是从此开始记录一下. 目前为止大部分的学习资料来自于Heresy的博客,写的非常优秀,清晰明了,十分感谢.开发语言为C++,应该会一直使用,但 ...

  4. codeforces 590B B. Chip 'n Dale Rescue Rangers(二分+计算几何)

    题目链接: B. Chip 'n Dale Rescue Rangers time limit per test 1 second memory limit per test 256 megabyte ...

  5. hihocoder 1037 数字三角形

    #1037 : 数字三角形 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸 ...

  6. MongoDB - Introduction to MongoDB, MongoDB Extended JSON

    JSON can only represent a subset of the types supported by BSON. To preserve type information, Mongo ...

  7. Part 2 How are the URL's mapped to Controller Action Methods?

    Part 2 How are the URL's mapped to Controller Action Methods? The answer is ASP.NET Routing.Notice t ...

  8. Python Opearte SQLAlchemy Do Something

    近段时间在看SQLAlchemy,总之万事开头难,但是么办法. Database Urls The create_engine() function produces an Engine object ...

  9. win7安装office2007出错被中断-已经解决

    觉得雨林木风win7系统本身的office2007不好,但不能卸载,用360强力删除工具,把整个安装的文件夹全部删除,重新用之前能够在另外xp和win7系统成功安装的破解版office2007,安装开 ...

  10. UI2_UITableViewDelete

    // AppDelegate.m // UI2_UITableViewDelete // // Created by zhangxueming on 15/7/14. // Copyright (c) ...