【性能分析】初探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.         -# 冒泡排序 
  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.     \return 函數執行成功則返回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\n"),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才能確定程序是否真的得到了優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章