使用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. 怎样手势的判断android GestureDetector在android开发中

    import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view. ...

  2. JSP的学习(6)——九大隐式对象及其out对象

    本篇将介绍JSP中的九大隐式对象,并重点介绍其中的out对象. 我们在之前的博客<JSP的学习(1)——基础知识与底层原理>一文中已经知道,JSP最终要被翻译和转换成Servlet,在转换 ...

  3. 简单的ajax获取json

    一个DBhelper类,用来操作数据库 using System; using System.Collections.Generic; using System.Linq; using System. ...

  4. cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题

    ============================================================ 博文原创,转载请声明出处 电子咖啡-专注于移动互联网 ============ ...

  5. HDU 4344 随机法判素数(费马小定理

    #include <cstdio> #include <ctime> #include <cmath> #include <algorithm> usi ...

  6. jquery easyui Accordion的使用

    <html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...

  7. 【Demo 0016】SQLite 数据库

    本章学习要点:       1.  熟悉SQL语句:       2.  掌握SQLit库的基本用法;        3.  掌握SQLite封装:

  8. oracle实现远程连接超简单;枚举与剪枝();PowerDesigner生成数据库代码注意里面的双引號,应该去掉

    点击開始,查看netManager,点击面板的监听程序,默认仅仅有地址1且标记着localhost.新建一个地址,输入本机IP,又一次开启监听程序就可以 △△△ * △△ = △△△△ 某3位数乘以2 ...

  9. uva 10655 - Contemplation! Algebra(矩阵高速幂)

    题目连接:uva 10655 - Contemplation! Algebra 题目大意:输入非负整数,p.q,n,求an+bn的值,当中a和b满足a+b=p,ab=q,注意a和b不一定是实数. 解题 ...

  10. OCA读书笔记(10) - 管理UNDO数据

    Undo自动管理与手动管理 undo段自动管理SQL> show parameter undo_management 将undo段改为手工管理SQL> alter system set u ...