使用Visual Studio 寻找App性能瓶颈
使用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
使用Visual Studio 寻找App性能瓶颈的更多相关文章
- 利用Visual Studio寻找C#程序必要的运行库文件
在工程打包中,有时候很头痛的就是运行所需要的库文件不能够全面的包含进来,特别是有时候调用了一系列外部扩展.对于这些问题,我们可以借用Visual Studio的打包功能帮助我们寻找软件运行必须的库文件 ...
- 免费的Visual Studio的插件
在做了深入(的)研究之后(通过在google网站搜索),,我编译了15个免费Visual Studio 2005插件表..其中一些插件将提高您(的)代码(的)质量,,另外一些能使您编译(的)更快,,但 ...
- How to debug .NET Core RC2 app with Visual Studio Code on Windows?
Simone Chiaretta (http://codeclimber.net.nz/archive/2016/05/20/How-to-debug-NET-Core-RC2-app-with-Vi ...
- 2.[WP Developer体验Andriod开发]Andriod Studio结合Visual Studio Emulator for Android调试Android App
0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...
- Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案
创建一个Android App项目后,直接启动调试发现Visual Studio Emulator for Android已成功运行,但应用始终处于Build中(等待时间超过1小时),并未如预期通过a ...
- 用Xamarin和Visual Studio编写iOS App
一说开发 iOS app,你立马就会想到苹果的开发语言 Objective C/Swift 和 Xcode.但是,这并不是唯一的选择,我们完全可以使用别的语言和框架. 一种主流的替换方案是 Xamar ...
- Visual Studio 2015开发Android App问题集锦
Visual Studio 2015开发Android App 启动调试始终无法完成应用部署的解决方案 创建一个Android App项目后,直接启动调试发现Visual Studio Emulato ...
- (12)Visual Studio 2012如何透过电子邮件部署Xamarin.Android App
原文 Visual Studio 2012如何透过电子邮件部署Xamarin.Android App Android App在部署到实机的时候不像iOS的App限制你一定要使用向Apple申请的开发者 ...
- 004.Create a web app with ASP.NET Core MVC using Visual Studio on Windows --【在 windows上用VS创建mvc web app】
Create a web app with ASP.NET Core MVC using Visual Studio on Windows 在 windows上用VS创建mvc web app 201 ...
随机推荐
- [欧拉回路+手动开栈] poj 1780 Code
题目链接: http://poj.org/problem? id=1780 Code Time Limit: 1000MS Memory Limit: 65536K Total Submissio ...
- 如何学习php之吐槽
我也做了php一段时间了.从技术层面上解释吧. 深入学习任何的东西都要有个体系. 1 完整的学习整个体系结构.解决有什么的问题. 推荐看看这个.http://www.open-open.c ...
- OpenCV编程->Windows7下调用iPhnoe摄像头
////////////////////////////////////////////////////////////// 指尖热度原创,转载请注明来自http://blog.csdn.net/s ...
- Python中字符串的方法及注释
先整理到这里:用的时候便于查询.相当于自己的资料库吧. capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) ...
- Effective C++_笔记_条款02_尽量以const、enum、inline替换#define
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 这个条款或许改为“宁可以编译器替换预处理器”比较好,因为或许#d ...
- 一个关于native sql的程序
*&---------------------------------------------------------------------* *& Report ZHR_BPM11 ...
- 把linux可执行程序做成一个服务[转]
转自:http://www.2cto.com/os/201202/121249.html 在linux系统启动的时候,我们可以看到很多服务性程序一个接一个的被启动(就是那些后面有一个兰色[OK]的行) ...
- poj 3082多边形相交 'Roid Rage
题意是判断多边形是否相交 主要的思路就是判断每一个点是否在另外的多变形内 判断一个点是否在另一个多边形内主要思路是: 判断的那个点向左边做射线,如果射线与多边形的交点为奇数个则在多边形内,偶数个则不在 ...
- Java中ArrayList和LinkedList差别
一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机訪问get和set.A ...
- Extract Datasets
*&---------------------------------------------------------------------* *& Report ZTEST2013 ...