免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VS2012自帶的 性能分析 工具使用實(shí)例

先看console代碼(源代碼下載):

static void Main(string[] args)        {            int i = 10000;            while(i-->0)            {                Core c=new  Core();                c.Process(DateTime.Now.ToString());            }        }public class Core    {        public void Process(string input)        {            //process logic            string result = string.Format("{0}-{1}", DateTime.Now, input);            //log to file            Log(result);        }        public void Log(string message)        {            string fileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log.txt");            string msg = "{Now}: {Message}";            msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));            msg = msg.Replace("{Message}", message);            using (StreamWriter sw = System.IO.File.AppendText(fileName))            {                sw.WriteLine(msg);                sw.Flush();                sw.Close();            }        }    }

進(jìn)行初次分析性能,操作步驟如下:

 點(diǎn)擊“完成”按鈕,此時(shí)會(huì)自動(dòng)進(jìn)行分析,直接跑完控制臺(tái)程序,vs2012會(huì)自動(dòng)顯示出分析報(bào)告,如下:

從上面的“摘要”報(bào)告中得知

  1. System.IO.File.AppendText函數(shù)和System.AppDomain.get_BaseDirectory函數(shù)耗時(shí)最多,我們需要先優(yōu)化這2個(gè)函數(shù)的使用(稍后再講)
  2. 共列出了最耗時(shí)的5個(gè)函數(shù)

報(bào)告視圖種類:

生成的報(bào)告視圖有很多種,上面所示默認(rèn)的是“摘要”視圖,其他類型的視圖如下所列:

 

那么我們?nèi)绾胃欉@幾個(gè)耗時(shí)的函數(shù)呢?我們需要轉(zhuǎn)入“函數(shù)詳細(xì)信息”視圖,如下:

右邊紅框代表耗時(shí)分布比例,顯然上圖中Process函數(shù)占用了很大比例

下邊的紅框代表相應(yīng)的代碼,并且還會(huì)紅色高亮性能損耗突出的代碼行、以及相應(yīng)損耗比例(圖中的99.2%是由于這行代碼共有3個(gè)損耗點(diǎn):83.3%+14.4%+1.5%)

我們需要往下跟蹤,進(jìn)入最嚴(yán)重的process函數(shù)進(jìn)行查看,我們click右邊紅框中的Process條,進(jìn)入細(xì)化的分析界面,如下:

看來主要問題來自"Log(result)"代碼行,占了73.5%,繼續(xù)深入跟蹤,如下圖:

這下差不多了,這里比較損耗多的2行是:獲得fileName和AppendText到日志文件代碼行,分別優(yōu)化:

  1. 獲得文件名優(yōu)化
    • 日志文件名是不變的,因此不用每次Log(msg)都要計(jì)算,直接extract為static的fileName變量
  2. AppendText優(yōu)化
    • 一旦牽涉到I/O操作,速度就慢,無法避免(從單行代碼的角度來看),那怎么辦?那就把結(jié)構(gòu)改掉吧:
      • 主程序?qū)懭雔og到隊(duì)列中,由另外一個(gè)thread負(fù)責(zé)寫入到磁盤中

  修改代碼如下:  

public class Core    {        public void Process(string input)        {            //process logic            string result = string.Format("{0}-{1}", DateTime.Now, input);            //log to file            Log(result);        }        private static List<string> log = new List<string>();        public static void Log(string message)//fileName去掉了,因?yàn)榇藭r(shí)已經(jīng)不需要這個(gè)變量了,因?yàn)槭怯善渌€程負(fù)責(zé)寫入磁盤        {            string msg = "{Now}: {Message}";            msg = msg.Replace("{Now}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));            msg = msg.Replace("{Message}", message);            log.Add(msg);        }    }

 

我們?cè)俅芜\(yùn)行性能分析,如下:

我們比較下第一次和這一次的曲線圖:

改進(jìn)后的性能明顯好于改進(jìn)之前的性能。

 

自定義性能分析

我們可以通過修改屬性來add/remove性能指標(biāo),比如要加入某個(gè)/某些Windows計(jì)數(shù)器、收集Windows事件、收集.NET對(duì)象生命周期等,我們可以進(jìn)行如下操作來進(jìn)行設(shè)置:

將會(huì)生成如下更詳細(xì)的報(bào)告:

報(bào)告中會(huì)列出生成的最多的是哪種對(duì)象(本例中是string)、由哪些函數(shù)導(dǎo)致的分配了最多的內(nèi)存、等等

在“標(biāo)記”視圖中,能看到每隔500毫秒收集的windows計(jì)數(shù)器數(shù)據(jù),如下圖就是磁盤隊(duì)列計(jì)數(shù)器的收集:

在“對(duì)象生存期”視圖中,能看到各種對(duì)象從new到dispose的所有數(shù)據(jù),如下圖:

很牛b吧。

下面說說如何通過VS2012來對(duì)獨(dú)立運(yùn)行的程序進(jìn)行性能分析,其實(shí)很簡(jiǎn)單,就下面這個(gè)圖就搞定了,大家都懂的:

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
python處理csv數(shù)據(jù)的方法
C#開發(fā)高性能Log Help類設(shè)計(jì)開發(fā)
Go實(shí)現(xiàn)海量日志收集系統(tǒng)(二)
手把手fastDFS實(shí)戰(zhàn)2
TelloPy-develop-0.7.0源碼閱讀.1
python筆記46-史上最強(qiáng)大最好用的python日志模塊nb_log
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服