VS2010 Profile效能分析
阿新 • • 發佈:2019-01-03
使用VS2010及其VS系列的分析選單下的“啟動效能嚮導”。
一、基本Profile分析
1)摘要檢視可以選擇指定的區域進行分析,比如成功執行以後的,或者高峰點進行右鍵篩選分析。
2)呼叫關係樹檢視 可以看到總體的效能消耗函式。
3)呼叫和被呼叫檢視,可以主要的效能開銷呼叫路徑。
4)函式檢視可以看到每個函式的呼叫情況:
定位入口點“非獨佔樣本數”指示該函式及其呼叫的任何函式所執行的工作量。 高非獨佔計數指向整體消耗資源最多的函式。
具體效能瓶頸函式:“獨佔樣本數”指示函式體中的程式碼執行的工作量(不包括該函式呼叫的函式所執行的工作量)。 高獨佔計數可能表示函式本身存在效能瓶頸。
雙擊函式名稱可以進去具體的函式分析,對非獨佔樣本數大的函式右鍵選單中可以選擇由該函式呼叫的函式檢視,分析效能瓶頸。
二、更多的Profile分析
可以建立篩選器,請注意,此篩選適用於效能報告中的所有檢視。這也是 Visual Studio 分析器自動顯示已篩選資料的新摘要頁面的原因。當使用CPU樣本分析時候,當程序在等待磁碟、網路或任意其他資源時,Visual Studio 分析器均不會收集樣本。這就是如果應用程式並未有效使用
CPU,建議使用檢測分析的原因。通過使用檢測分析,可準確測量各種資料,如執行函式所花時間(“經過的時間”)、函式的呼叫次數以及函式正在使用 CPU(“應用程式時間”)且未被 OS 切換出來的時間。
通過同時使用取樣和檢測,還可收集基於 Microsoft®.NET Framework 的應用程式的記憶體分配資料。使用者可使用效能會話屬性頁面啟用和調整 .NET 記憶體分配資料的收集。
注意其它的分析檢視模式,摸索下 就知道了。 三、定位到具體的函式,分析效能原因(基本都是程式設計師邏輯問題,非系統語言等外部原因),採用改進方法 儘量避免重複無用的計算;避免計算和減少 計算的方法;或者將計算提前或者延遲,來提高CPU消耗。或者用多執行緒來併發計算,提高效能。使用高效的記憶體容器,快取記憶體。 優化設計:實時監測改為回撥驅動,頻繁申請改為一次申請記憶體或者使用記憶體池,不需要的資料量及時刪除避免無謂的遍歷和搜尋。 優化演算法:O(N2)向O(N),O(1)轉換。
優化查詢:用orderhash_map,hash_map來提高效能;切斷查詢不再需要的就不查找了。
優化排序:提前排序好,使用更小的集合。
優化:優化底層庫,LockBits代替SetPixel,比如用Shader代替CPU計算,用記憶體檔案對映代替io函式,用order_map代替map,用epoll/iocp網路模式。
優化記憶體資料結構:記憶體池,或者使用快取,來避免不斷的new delete記憶體;貼圖紋理記憶體共享等,及時刪除不需要的。
優化IO:使用記憶體檔案對映,和使用快取避免很多的IO。
優化表示式:計算表示式用位運算更快,不需要的提前運算好,儘量避免重複無用的計算。
優化物件管理:避免隱性的構造和析構,提高物件的效能。
四、重新Profile分析,對比效能報告,得到改進後的效果
右鍵單擊報告,並單擊上下文選單中的“Compare Performance Reports”(比較效能報告)選項。通過比較樣本數(越低效能越好),比較百分比來得到效能提升KPI。
更多Profile使用見:
注意其它的分析檢視模式,摸索下 就知道了。 三、定位到具體的函式,分析效能原因(基本都是程式設計師邏輯問題,非系統語言等外部原因),採用改進方法 儘量避免重複無用的計算;避免計算和減少 計算的方法;或者將計算提前或者延遲,來提高CPU消耗。或者用多執行緒來併發計算,提高效能。使用高效的記憶體容器,快取記憶體。 優化設計:實時監測改為回撥驅動,頻繁申請改為一次申請記憶體或者使用記憶體池,不需要的資料量及時刪除避免無謂的遍歷和搜尋。 優化演算法:O(N2)向O(N),O(1)轉換。
更多Profile使用見: