当前位置: 首页 > news >正文

VS2010性能监视工具

《编程珠玑(续)》第一章中就介绍了性能监视工具,对于较简单的程序来说,性能监视工具其实可以用变量累加来计算的,但是对于较复杂的程序来说就需要比较好的性能监视工具了。而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:创建并运行性能会话

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

创建并运行性能会话

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

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

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

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

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

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

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

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

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

步骤 2:分析采样数据

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

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

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

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

抽样的摘要报表视图

分析采样数据

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

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

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

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

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

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

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

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

    执行大部分工作的函数的列表

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

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

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

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

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

步骤 3:修改代码并重新运行会话

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

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

  1. 更改代码。

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

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

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

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

相关文章:

  • Silverlight和WPF开发人员必须具备以下十大开发技能
  • 满足需求为第一位
  • 窗体信息处理函数讲解
  • 易宝典文章——如何配置Windows Live Mail使用连接Exchange邮箱
  • 关于 UIImageView
  • [原创]什么是信息安全资产管理?
  • http 状态代码表
  • 浅谈项目与产品的区别
  • css 一些常用属性总结
  • 玩《DOTA》有感
  • 会话EJB完整开发过程(以weblogic为服务器)
  • Oracle 基础篇 --- 表删除
  • IE 8 或者 IE 9 多标签设置
  • C# 关闭显示器(显示)
  • 一周学会Mootools 1.4中文教程:(4)类型
  • hexo+github搭建个人博客
  • CAP 一致性协议及应用解析
  • ES2017异步函数现已正式可用
  • Koa2 之文件上传下载
  • Redis 中的布隆过滤器
  • SpiderData 2019年2月16日 DApp数据排行榜
  • SpringCloud集成分布式事务LCN (一)
  • springMvc学习笔记(2)
  • vue自定义指令实现v-tap插件
  • Zsh 开发指南(第十四篇 文件读写)
  • 番外篇1:在Windows环境下安装JDK
  • 服务器之间,相同帐号,实现免密钥登录
  • 技术发展面试
  • 解决iview多表头动态更改列元素发生的错误
  • 京东美团研发面经
  • 悄悄地说一个bug
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 设计模式 开闭原则
  • 深度学习入门:10门免费线上课程推荐
  • 正则学习笔记
  • 自制字幕遮挡器
  • 【云吞铺子】性能抖动剖析(二)
  • Java数据解析之JSON
  • 阿里云重庆大学大数据训练营落地分享
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 国内开源镜像站点
  • ​Java并发新构件之Exchanger
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (二)PySpark3:SparkSQL编程
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (四)Controller接口控制器详解(三)
  • (学习日记)2024.01.09
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)用.Net的File控件上传文件的解决方案
  • ./configure,make,make install的作用
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET框架类在ASP.NET中的使用(2) ——QA