【性能分析】初探VS2010中的Profile(性能剖析)功能

VS2010中的Profile(性能剖析)功能十分实用,它可以协助程序员迅速锁定当前程序的性能瓶颈,为程序的优化做准备。

点击VS2010的Analyze菜单,选择Launch Performance Wizard,依照提示可以很方便地完成Profile的必需配置。可能你会碰到"Injection of runtime library failed"错误,这时就不要使用Wizard,而要选择Analyze下拉菜单中的Profiler->Attach/Detach...,将Profiler附加到进程上。

本文以名为Sorting的小程序为例。程序中除了main函数之外,定义了全局函数SortData和PrintData分别实现排序和打印功能。核心代码如下所示:

  1. //! SortAndPrint definition
  2. /*!
  3. \param iNum 待排序数组大小
  4. \param data 待排序数组首指针
  5. \return 函数执行成功则返回1
  6. - 三种方式排序
  7. -# 冒泡排序
  8. -# 数组+STL sort
  9. */
  10. bool SortData(int &iNum,int* data)
  11. {
  12. int temp;
  13. //! 冒泡排序
  14. for(int i=1;i<iNum;++i)
  15. {
  16. for(int j=0;j<iNum-i;++j)
  17. {
  18. if(data[j]>data[j+1])
  19. {
  20. temp=data[j];
  21. data[j]=data[j+1];
  22. data[j+1]=temp;
  23. }
  24. }
  25. }
  26. return 1;
  27. }
  28. //! PrintData definition
  29. /*!
  30. 打印有序数列到屏幕
  31. \param iNum 待排序数组大小
  32. \param data 待排序数组首指针
  33. \return 函数执行成功则返回1
  34. */
  35. bool PrintData(int &iNum,int* data)
  36. {
  37. //! 输出有序数列
  38. for(int i=0;i<iNum;++i)
  39. {
  40. if(i%50==0)
  41. {
  42. //system("pause");
  43. }
  44. _tprintf_s(_T("%d\n"),data[i]);
  45. }
  46. return 1;
  47. }

测试用例为50000个随机整数,采用冒泡排序,程序对应的Sample Profiling Report如图1所示。

图1 采用冒泡排序,程序对应的哦Sample Profiling Report

修改SortData的代码为:

  1. bool SortData(int&iNum,int* data)
  2. {
  3. sort(data,data+iNum-1);
  4. return 1;
  5. }

这里调用了STL中的sort函数模板,程序对应的Sample Profiling Report如图2所示。

图2 调用STL sort函数模板,程序对应的Sample Profiling Report

观察图1和图2中的CPU Usage曲线,一定程度上图2更优一些;观察Hot Path(即调用热路径),已经从图1中的SortData转移到图2中的Unknown Function;另外,函数独占工作时间也发生了变化,图2显示耗费最大的已经不再是SortData函数了。

VS2010同样提供了对比工具,将图1和图2各自的Sample Profiling Report进行Compare,如图3所示。

非常明显,核心的函数调用,调用了STL sort模板函数的新程序对资源的消耗要小很多。

上面的例子说明,借助于VS2010 Profiler,可以迅速锁定当前程序的性能瓶颈,如本例中的SortData函数,为程序的优化做准备;程序优化之后,Profiler也是一个必要的验证工具,只有比较优化前后程序Profiling Report才能确定程序是否真的得到了优化。

【性能分析】初探VS2010中的Profile(性能剖析)功能

时间: 2024-10-19 18:09:45

【性能分析】初探VS2010中的Profile(性能剖析)功能的相关文章

性能分析初探

而对于测试场景,对于不同 App,选取的场景肯定有所不同,不过可以统一的是,性能测试场景一定是 App 业务的主流程或者核心功能场景. 比如支付宝的转账.缴费,微信的聊天.拍照发朋友圈.更新朋友圈. 性能分析初探: 内存占用过大时应该查看是否有内存泄露.是否有对象使用了不合理的数据结构: (1)内存泄露可以借助 MAT.Leakcanary 等工具来分析定位: (2)不合理的数据结构需要针对内存占用排名靠前的类型进行分析,需要研究 Java 不同集合类的使用场景和实现原理的区别: 启动时间太慢,

CSS性能分析,如何优化CSS提高性能

css匹配原理 在优化css之前我们需要了解下css是怎么进行工作的,我们都知道css是由选择器,属性和属性值构成的. 我们可能会这样写上一行代码 //css .con .loulan1 p span{ display: block; } //html<div class="con">     <div class="loulan">         <p><span>文字</span></p>

mysql性能分析show profile/show profiles

MySQL性能分析show profiles show profile 和 show profiles 语句可以展示当前会话(退出session后,profiling重置为0) 中执行语句的资源使用情况. Profiling 功能由MySQL会话变量 : profiling控制,默认是OFF.关闭状态.select @@profiling; 或者show variables like '%profi%': mysql> select @@profiling; +-------------+ |

使用gprof来对程序的性能分析总结

综述 gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序. gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析. gprof默认不支持多线程程序,默认不支持共享库程序. gcc -pg 编译程序 运行程序,程序退出时生成 gmon.out gprof ./prog gmon.out -b 查看输出 注意事项 程序如果不是从main return或exit()退出,则可能不生成gmon.out. 程序如果崩溃,可能不生成gmon.out

用Chrome开发者工具做JavaScript性能分析

英文原文:Zack Grossbart,编译:伯乐在线——王筱 你的网站正常运转.现在我们来让它运转的更快.网站的性能由页面载入速度和代码执行效率决定.一些服务可以让你的网站载入更快,比如压缩JS和CDN,但是让代码执行的更快你要做的事情. 代码中很小的改动都可能对性能造成巨大的影响.快速灵活的网站和可怕的“无响应脚本”对话框可能只有几行代码的差别.这篇文章告诉你如何通过用Chrome开发者工具(Chrome Developer Tools)找到这几行关键的代码. 设置一个基线 我们来看一个简单

性能和性能分析

性能分析是指观察和记录有关应用程序行为的度量的过程.常见的性能问题源于运行速度慢或低效的代码,或者导致内存浪费的代码. 大多数性能分析工具都可以归为: 采样式:采样式性能分析器通过获取运行应用程序的周期性快照(称为采样),记录每个时间间隔内的应用程序运行状态,包括正在执行的代码行.通常情况下,不会修改被测系统代码,而倾向于采用外部透视方法. 插装式:采用侵入式方案. 两者的主要区别在于,采样式分析器在运行任何代码时都会检查应用程序,包括对外部库的调用.而插装式分析器则只从插装代码收集数据. Vi

SylixOS调试方法详解——性能分析

1. SylixOS调试方法介绍 SylixOS实现了一个功能强大的调试stub(桩),可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件.目前RealEvo-IDE既支持自动推送调试.也支持传统的手动启动gdbserver的调试方式.在官方公布的使用手册中没有详细写出在日常开发中非常实用的几种调试方式,本文主要介绍性能分析的调试方法. 在日常开发过程中经常会遇到程序不够快的情况,但是不知道到底慢在哪里,往往是随意寻找函数优化,并没有没有真正定位到程序哪里慢,存在很大

带你玩转Visual Studio——性能分析与优化

上一篇文章带你玩转Visual Studio--VC++的多线程开发讲了VC++中多线程的主要用法.多线程是提升性能和解决并发问题的有效途经.在商用程序的开发中,性能是一个重要的指标,程序的性能优化也是一个重要的工作. 找到性能瓶颈 二八法则适合很多事物:最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的.在程序代码中也是一样,决定应用性能的就那20%的代码(甚至更少).因此优化实践中,我们将精力集中优化那20%最耗时的代码上,这那20%的代码就是程序的性能瓶颈,主要针对这部

C++应用程序性能优化(三)——C++语言特性性能分析

C++应用程序性能优化(三)--C++语言特性性能分析 一.C++语言特性性能分析简介 通常大多数开发人员认为,汇编语言和C语言比较适合编写对性能要求非常高的程序,C++语言主要适用于编写复杂度非常高但性能要求并不是很高的程序.因为大多数开发人员认为,C++语言设计时因为考虑到支持多种编程模式(如面向对象编程和范型编程)以及异常处理等,从而引入了太多新的语言特性.新的语言特性往往使得C++编译器在编译程序时插入了很多额外的代码,会导致最终生成的二进制代码体积膨胀,而且执行速度下降.但事实并非如此