乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       賈朋亮博客 2013-04-24

      先看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ì)化的分析界面,如下:

      看來(lái)主要問(wèn)題來(lái)自"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操作,速度就慢,無(wú)法避免(從單行代碼的角度來(lái)看),那怎么辦?那就把結(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)之前的性能。

       

      自定義性能分析

      我們可以通過(guò)修改屬性來(lái)add/remove性能指標(biāo),比如要加入某個(gè)/某些Windows計(jì)數(shù)器、收集Windows事件、收集.NET對(duì)象生命周期等,我們可以進(jìn)行如下操作來(lái)進(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吧。

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

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多