使用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性能瓶颈的更多相关文章

  1. 利用Visual Studio寻找C#程序必要的运行库文件

    在工程打包中,有时候很头痛的就是运行所需要的库文件不能够全面的包含进来,特别是有时候调用了一系列外部扩展.对于这些问题,我们可以借用Visual Studio的打包功能帮助我们寻找软件运行必须的库文件 ...

  2. 免费的Visual Studio的插件

    在做了深入(的)研究之后(通过在google网站搜索),,我编译了15个免费Visual Studio 2005插件表..其中一些插件将提高您(的)代码(的)质量,,另外一些能使您编译(的)更快,,但 ...

  3. 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 ...

  4. 2.[WP Developer体验Andriod开发]Andriod Studio结合Visual Studio Emulator for Android调试Android App

    0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...

  5. Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案

    创建一个Android App项目后,直接启动调试发现Visual Studio Emulator for Android已成功运行,但应用始终处于Build中(等待时间超过1小时),并未如预期通过a ...

  6. 用Xamarin和Visual Studio编写iOS App

    一说开发 iOS app,你立马就会想到苹果的开发语言 Objective C/Swift 和 Xcode.但是,这并不是唯一的选择,我们完全可以使用别的语言和框架. 一种主流的替换方案是 Xamar ...

  7. Visual Studio 2015开发Android App问题集锦

    Visual Studio 2015开发Android App 启动调试始终无法完成应用部署的解决方案 创建一个Android App项目后,直接启动调试发现Visual Studio Emulato ...

  8. (12)Visual Studio 2012如何透过电子邮件部署Xamarin.Android App

    原文 Visual Studio 2012如何透过电子邮件部署Xamarin.Android App Android App在部署到实机的时候不像iOS的App限制你一定要使用向Apple申请的开发者 ...

  9. 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 ...

随机推荐

  1. Dropbox + Farbox高速创建免费博客小站

    创建自己的Dropbox账号(已有账号的略过) 注冊地址:Dropbox 点击链接注冊就好了,so easy: 账号注冊成功后,能够选择下载同步client(windows.Mac.ios.andro ...

  2. 基于visual Studio2013解决面试题之0206hash表实现

     题目

  3. boost::asio网络传输错误码的一些实验结果(recv error_code)

    错误码很重要,可以由此判断网络连接到底发生了神马事情,从而驱动高层逻辑的行为.只有笼统的错误码判断的网络层是不够规范的,鄙人觉得有些错误码还是需要在网络层就区分开的,特此记录一些当前实验的错误码以及发 ...

  4. Element.Event

    addEvent(type,fn):为DOM元素增加一个事件监听器 removeEvent(type,fn):移除先前为DOM元素添加的事件监听器 eg: var destroy = function ...

  5. 在tornado中使用celery实现异步任务处理之中的一个

    一.简单介绍 tornado-celery是用于Tornado web框架的非堵塞 celeryclient. 通过tornado-celery能够将耗时任务增加到任务队列中处理, 在celery中创 ...

  6. android解析xml一直报错org.xmlpull.v1.XmlPullParserException

     错误: org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT @1:2 injava.io.String ...

  7. hdu 4550 贪婪 思考题 权

    http://acm.hdu.edu.cn/showproblem.php?pid=4550 想了挺久,然后各种分类 最终AC,假设是现场,对自己没信心的话,预计还是要WA,,,,,,然后搜题解,发现 ...

  8. jquery实现鼠标焦点十字效果

    系统开发时很多地方需要有焦点效果,例如:鼠标点击聚焦,地图定位,在图片上突出显示,焦点定位页面元素. 本小功能通过jquery和graphics二次开发,实现通过鼠标点击页面任何区域,聚焦当前点击位置 ...

  9. alv 显示 汇总数据

    alv中有 字段设置 gs_fieldcat-do_sum = ‘1’.字段  用于控制汇总

  10. Lucene.Net 2.3.1开发介绍 —— 二、分词(一)

    原文:Lucene.Net 2.3.1开发介绍 -- 二.分词(一) Lucene.Net中,分词是核心库之一,当然,也可以将它独立出来.目前Lucene.Net的分词库很不完善,实际应用价值不高.唯 ...