博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VS2010性能监视工具
阅读量:5964 次
发布时间:2019-06-19

本文共 3119 字,大约阅读时间需要 10 分钟。

《编程珠玑(续)》第一章中就介绍了性能监视工具,对于较简单的程序来说,性能监视工具其实可以用变量累加来计算的,但是对于较复杂的程序来说就需要比较好的性能监视工具了。而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 函数名称会比较晦涩难懂。 有关如何确保具有所需文件的更多信息,请参见。

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

创建并运行性能会话

  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”文件夹添加另一个数据文件。 同时选择原始分析数据和新分析数据,右击所选内容,然后单击“比较性能报告”

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

转载于:https://www.cnblogs.com/hdk1993/p/4600896.html

你可能感兴趣的文章
quick-cocos2d-x开发环境Lua for IntelliJ IDEA的安装
查看>>
Target-Action回调模式
查看>>
换个红圈1微信头像恶搞一下好友
查看>>
Socket网络编程--简单Web服务器(3)
查看>>
ylbtech_dbs_article_五大主流数据库模型
查看>>
Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
查看>>
10行Python代码解决约瑟夫环(模拟)
查看>>
一个简单好用的日志框架NLog
查看>>
超级硬盘数据恢复软件 4.6.5.0注冊码破解版
查看>>
一款基于jquery和css3实现的摩天轮式分享按钮
查看>>
Android创建启动画面
查看>>
Linux中date命令的各种实用方法--转载
查看>>
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
查看>>
玩家游戏状态
查看>>
Android 小技巧-- TextView与EditText 同步显示
查看>>
苹果企业版帐号申请记录
查看>>
C++ Error: error LNK2019: unresolved external symbol
查看>>
Bitmap 和Drawable 的区别
查看>>
Java操作mongoDB2.6的常见API使用方法
查看>>
信息熵(Entropy)究竟是用来衡量什么的?
查看>>