使用Visual Studio 寻找App性能瓶颈

最后更新日期:2014-05-05

阅读前提

环境:Windows 8.1 64bit英文版,Visual Studio 2013 专业版Update1英文版

正文

假设在应用程序的开发过程中,从头到尾顾及性能优化,开发效率会非常低,所以我们须要借助profiler工具分析现有代码,性能的瓶颈在哪里? 然后针对热点进行优化,这样能够提高产品的投入产出比,Visual Studio 2013专业版的profile工具有四个功能。普通的C++程序仅仅使用了[CPU Sampling]和[Instrument]两个功能,当中[CPU Sampling]是分析C++程序性能的推荐选项。

以须要几秒钟才干执行完成的C++语言Windows控制台项目为例。选择,主菜单[Analyze]->[Performance and Diagnostics]打开[PerformanceWizard]窗体。有四个选项。选择CPU Sampling(推荐)。測量函数的调用时间。这个wizard有三步,最后点击[Finish]就启动profiling直到程序执行结束。profile工具生成Sample Profiling Report。

Hot Path栏目中。

ElapsedInclusive Time,函数占用的时间

Elapsed Exclusive Time。是inclusive time减去子函数的执行时间

假设你要知道各个函数的具体调用次数能够在[Performance Wizard]中选择[Instrumentation],由于它要在每一个函数前后插入測量代码所以执行程序和分析报告的时间长非常多, 结束后会生成Instrumentation Profiling Report,相对于Sample ProfilingReport仅仅是多了函数调用次数的信息。所以不推荐。

怎样找到最花时间的函数?

Summary视图中,FunctionsWith Most Individual Work栏列出最耗时的五个函数,直接点击列表中的函数名称,切换到[Function Details]View,以下是initSample函数[FunctionDetails]视图的截屏:

三个图块分别代表[1]调用者[2]当前函数[3]被调用者。深蓝色背景上面显示包含子函数调用所占时间百分比(Inclusive Time),淡蓝色显示函数体(不包含子函数)本身所占时间百分比(Exclusive Time)。点击以下的[Caller/Callee]能够转到[Caller/Callee]视图,通过调用者和被调用者列表。看到各个函数的调用次数,花的时间百分比。

你能够切换到[Functions]视图看到全部函数。让这些函数依照所耗时间多少排序。寻找你要的最耗时函数。

依据名字寻找指定函数

切换到Functions(或Modules)视图,[Ctrl]+[F]快捷键弹出查找窗体输入要找的函数名称,指定查找范围为[Current Document],按[Enter]找到函数后。双击函数名称就能够切换到这个函数的[Function Details]视图。要查找某个模块的函数,最好是在[Modules]视图下,在这个视图下方便查找某个Modules下的函数。

依据调用次数查找指定函数

[Functions]视图中,能够点击某个列名。函数列表会依照这个列的属性的大小值排序,找到要的函数后双击就能够切换到这个函数的[Function Details]视图了。

依据函数调用顺序查找

怎样你知道热点大致的位置,切换到[Call Tree]视图。找到根节点后,右键单击弹出菜单选择[Set Root]。这样就能够不用看其他分支,假设要重置根节点,弹出菜单中选择[Reset Root]就能够了。

依据Number ofCalls(调用次数)和Elapsed Tiime(时间开销)一步步展开节点,直到要改动的函数,右键弹出菜单选择[View Source]能够转到具体的源码,[Show Function Details]切换到当前函数的[FunctionDetails]视图后,蓝色框的右上角显示的是当前函数总的时间(Inclusive Time)开销占的百分比,蓝色框能够左键单击切换到指定函数的[Function Details]视图。点击三个框以下的Caller/Callee能够看到更具体的调用者。被调用者信息。

怎样分析执行时间非常长的程序

profile执行的时候,能够选择[StopProfiling],结束分析后生成Instrumentation(或Sampling) Profiling Report,默认出现Summary视图。

參考下图Summary视图, 在曲线图上标记出要分析的时间段。右键弹出菜单,单击[Filter Profiling Data by Selection]项就可以。

參考资料

《Find Application Bottlenecks with Visual Studio Profiler》

http://msdn.microsoft.com/en-us/magazine/cc337887.aspx

最新文章

  1. oracle 修改密码
  2. Python自动化之一对多
  3. Android 程序崩溃后的处理
  4. 2015ACM/ICPC亚洲区长春站 A hdu 5527 Too Rich
  5. 在xml中使用图片资源时,设置重复图片而不是拉伸平铺
  6. 分享一下怎么开发一款图片视频类App,秒拍和prisma
  7. JS 实现中英文翻译
  8. UVa 1453 - Squares 旋转卡壳求凸包直径
  9. sqlite3使用入门
  10. MYSQL 的 6 个返回时间日期函数
  11. 小程序解释HTML富文本的两种办法
  12. android Material Design详解
  13. 11个教程中不常被提及的JavaScript小技巧
  14. Windows环境下实现Consul服务注册和服务发现
  15. 使用Vivado进行行为级仿真
  16. bs4.BeautifulSoup的基础用法
  17. 火狐hr标签的兼容性问题
  18. python学习之老男孩python全栈第九期_数据库day002 -- 作业 (数据库为day001创建的数据库)
  19. 《Java程序猿面试笔试宝典》之Java程序初始化的顺序是如何的
  20. django系列6--Ajax06 使用插件,Sweet-Alert插件

热门文章

  1. Mac上利用Eclipse编译Cocos2d-x
  2. osgi实战学习之路:5.生命周期及利用命令、装饰者模式实现基于socket交互Bundle命令demo
  3. ASP.NET - 在类中如何使用 Server.MapPath
  4. 基础知识(9)- Swing用户界面组件
  5. 使用RNSwipeViewController类库进行视图切换
  6. SQL基础检测
  7. Sql Server中COUNT(字段名)跟COUNT(*)的特殊不同点
  8. 【m从翻译os文章】写日志禁令Sqlnet.log和Listener.log
  9. arch Failed to load module "intel"
  10. hdu 2055 An easy problem (java)