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

    测试用例为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才能确定程序是否真的得到了优化。

  • 相关阅读:
    english note(6.3 to 6.8)
    english note(6.2 to 5.30)
    Lambda表达式
    Python Software Foundation
    eval(input())
    北航操作系统实验2019:Lab4-1代码实现参考
    北航操作系统实验2019:Lab4-1流程梳理
    面向对象设计与构造2019 第二单元总结博客作业
    面向对象设计与构造2019 第一单元总结博客作业
    Java代码度量分析工具:Designite简介
  • 原文地址:https://www.cnblogs.com/For-her/p/3817636.html
Copyright © 2020-2023  润新知