天天看點

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

     最後一篇,我們來說說vs的“性能向導",通常我們調試程式的性能一般會使用Stopwatch,如果希望更加系統的了解程式,我們就需要

用到”性能向導“,通過性能報告便于我們快速的發現并找到潛在的性能問題。

首先我們上一段需要改進的代碼:

記住,我們的程式需要改成Release版本,因為這裡包含了太多的優化資訊。

找到”工具欄”->"分析"->"啟動性能向導",選中“并發”->"可視化多線程應用程式的行為"。

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

然後選中我們的程式Test

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

最後點選完成,如果是第一次使用的話會提示你“是否立即配置符号”,這是因為我們的并行計算用到了window函數,是以我們調試的時候

需要加載這些符号。點選“是”,然後勾選“MicroSoft符号伺服器”,點選确定就OK了。

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式
8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

稍等一會,我們會看到三種視圖:CPU使用率,線程,核心。

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

然後我們進入“CPU使用率”,看看情況。

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

從圖中:我們可以獲知如下資訊:

①:從圖中的綠色破浪線可以看出,我們的程式确實是多核計算。

②:并行計算耗時16515ms,平均CPU使用率:39%。,這裡要注意,性能剖析器也需要耗費CPU周期,是以執行時間要稍大于實際時間。

然後,我們點選“線程“tab,看看效果

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

通過點選各個”線程”的綠色小條,然後看下“分析報告”:發現程式被三個task承載執行:主線程(644),輔助線程(4824),輔助線程(1564)。

然後我們點選“可見時間線分析”中的“同步”,看看同步是由誰貢獻出來的,清楚的看到Monitor.Enter,這是因為我的代碼裡面有lock。

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

而且阻塞時間還是蠻厲害的,這裡就是我們可以優化的點。

接下來,我們看看“核心”标簽

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

這個标簽給我們展示的是:各個線程是如何的映射到可用邏輯處理器核心的,具體的也沒有什麼好說的。

剛才也說了,我們程式的Monitor那一塊是一個優化點,仔細論證代碼,我們發現lock鎖是多餘的,接下來我們要做的事情就是去掉lock,

然後看看效果:

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

最後我們發現,程式的執行時間确實加速了。不過這裡面還有很多的東西等待挖掘,我也就簡單的分析到此了。

最後希望大家能夠在此系列中擷取一絲營養。

8天玩轉并行開發——第八天 用VS性能向導解剖你的程式

繼續閱讀