使用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 ...
随机推荐
- Boost Thread学习笔记
thread自然是boost::thread库的主 角,但thread类的实现总体上是比较简单的,前面已经说过,thread只是一个跨平台的线程封装库,其中按照所使用的编译选项的不同,分别决定使用 W ...
- CImageList类Create函数参数解析
前面提到了CImageList类的Create(...)函数,虽然MSDN上已经有所解释,但仍有网友问到参数的具体含义,下面就我的理解,对参数进行一次轻量级的剖析 函数原型(其他重载函数请参看msdn ...
- oracle 表连接 - hash join 哈希连接
一. hash 连接(哈希连接)原理 指的是两个表连接时, 先利用两表中记录较少的表在内存中建立 hash 表, 然后扫描记录较多的表并探測 hash 表, 找出与 hash 表相匹配的行来得到结果集 ...
- Network Panel说明
Chrome Developer Tools:Network Panel说明 官方资料:Chrome Developer Tools: Network Panel 一.chrome Develop ...
- mysql update改动多条数据
通常情况下,我们会使用下面SQL语句来更新字段值: 复制代码代码例如以下: UPDATE mytable SET myfield='value' WHERE other_field='other_va ...
- android在假设绘制自己定义的bitmap,然后返回给ImageView
先来说一下FontMetrics这个类.这个类是关于字符属性和測量的类 用图能够更精确的知道各个属性的含义: 我们在Layout中有一个ImageView,我们能够通过: <span style ...
- LCD显示--Ht1621b芯片显示屏驱动
Ht1621b芯片显示屏驱动 关于HT1621b芯片的具体信息能够參考数据手冊上的内容:百度文库HT1621b中文资料 CS : 片选输入接一上拉电阻当/CS 为高电平读写HT1621的数据和命令无效 ...
- Linux下select, poll和epoll IO模型的详解
http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll 介绍 Epoll 可是当前在 Linux 下开发大规模并发网络程序的热 ...
- 设置 Linux 的 LD_LIBRARY_PATH 变量
源地址:http://www.cnblogs.com/trying/archive/2013/06/07/3123577.html 我们在ubuntu图形界面下用eclipse写了一个动态库,到cen ...
- 八皇后问题详细分析与解答(递归法解答,c#语言描述)
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或 ...