日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8天玩转并行开发——第八天 用VS性能向导解剖你的程序

發(fā)布時間:2025/4/16 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8天玩转并行开发——第八天 用VS性能向导解剖你的程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
8天玩轉(zhuǎn)并行開發(fā)——第八天 用VS性能向?qū)Ы馄誓愕某绦?

原文?8天玩轉(zhuǎn)并行開發(fā)——第八天 用VS性能向?qū)Ы馄誓愕某绦?/p>

?最后一篇,我們來說說vs的“性能向?qū)?#34;,通常我們調(diào)試程序的性能一般會使用Stopwatch,如果希望更加系統(tǒng)的了解程序,我們就需要

用到”性能向?qū)А?#xff0c;通過性能報告便于我們快速的發(fā)現(xiàn)并找到潛在的性能問題。

?

首先我們上一段需要改進(jìn)的代碼:

1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Diagnostics;6 7 namespace Test8 {9 class Program 10 { 11 static object obj = new object(); 12 13 static void Main(string[] args) 14 { 15 var watch = Stopwatch.StartNew(); 16 17 var range = ParallelEnumerable.Range(1, 100000000); 18 19 var query = (from n in range.AsParallel() 20 where n % 5 == 0 21 select Calculate(n)).Average(); 22 23 watch.Stop(); 24 25 Debug.WriteLine("耗費(fèi)時間:{0}", watch.Elapsed); 26 Console.WriteLine("耗費(fèi)時間:{0}", watch.Elapsed); 27 } 28 29 /// <summary> 30 /// 模擬復(fù)雜的數(shù)學(xué)計算 31 /// </summary> 32 /// <param name="num"></param> 33 /// <returns></returns> 34 static double Calculate(int num) 35 { 36 lock (obj) 37 { 38 var sqrt = Math.Sqrt(num); 39 40 var pow = Math.Pow(sqrt, 5); 41 42 var log10 = Math.Log10(pow); 43 44 var floor = Math.Floor(log10); 45 46 return floor; 47 } 48 } 49 } 50 }

?

記住,我們的程序需要改成Release版本,因為這里包含了太多的優(yōu)化信息。

?

找到”工具欄”->"分析"->"啟動性能向?qū)?#34;,選中“并發(fā)”->"可視化多線程應(yīng)用程序的行為"。

然后選中我們的程序Test

?

最后點擊完成,如果是第一次使用的話會提示你“是否立即配置符號”,這是因為我們的并行計算用到了window函數(shù),所以我們調(diào)試的時候

需要加載這些符號。點擊“是”,然后勾選“MicroSoft符號服務(wù)器”,點擊確定就OK了。

?

稍等一會,我們會看到三種視圖:CPU使用率,線程,內(nèi)核。

然后我們進(jìn)入“CPU使用率”,看看情況。

從圖中:我們可以獲知如下信息:

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

②:并行計算耗時16515ms,平均CPU使用率:39%。,這里要注意,性能剖析器也需要耗費(fèi)CPU周期,所以執(zhí)行時間要稍大于實際時間。

?

然后,我們點擊“線程“tab,看看效果

?

通過點擊各個”線程”的綠色小條,然后看下“分析報告”:發(fā)現(xiàn)程序被三個task承載執(zhí)行:主線程(644),輔助線程(4824),輔助線程(1564)。

?

然后我們點擊“可見時間線分析”中的“同步”,看看同步是由誰貢獻(xiàn)出來的,清楚的看到Monitor.Enter,這是因為我的代碼里面有l(wèi)ock。

而且阻塞時間還是蠻厲害的,這里就是我們可以優(yōu)化的點。

?

接下來,我們看看“核心”標(biāo)簽

這個標(biāo)簽給我們展示的是:各個線程是如何的映射到可用邏輯處理器內(nèi)核的,具體的也沒有什么好說的。

?

剛才也說了,我們程序的Monitor那一塊是一個優(yōu)化點,仔細(xì)論證代碼,我們發(fā)現(xiàn)lock鎖是多余的,接下來我們要做的事情就是去掉lock,

然后看看效果:

?

1 static double Calculate(int num)2 {3 var sqrt = Math.Sqrt(num);4 5 var pow = Math.Pow(sqrt, 5);6 7 var log10 = Math.Log10(pow);8 9 var floor = Math.Floor(log10); 10 11 return floor; 12 }

?

?

最后我們發(fā)現(xiàn),程序的執(zhí)行時間確實加速了。不過這里面還有很多的東西等待挖掘,我也就簡單的分析到此了。

最后希望大家能夠在此系列中獲取一絲營養(yǎng)。

posted on 2014-02-10 21:08 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3543530.html

總結(jié)

以上是生活随笔為你收集整理的8天玩转并行开发——第八天 用VS性能向导解剖你的程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。