佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 關(guān)于VS2012自帶的 性能分析 工具使用實(shí)例(圖文介紹)

關(guān)于VS2012自帶的 性能分析 工具使用實(shí)例(圖文介紹)

熱門標(biāo)簽:科大訊飛語音識別系統(tǒng) Mysql連接數(shù)設(shè)置 阿里云 服務(wù)器配置 Linux服務(wù)器 團(tuán)購網(wǎng)站 電子圍欄 銀行業(yè)務(wù)

本篇通過一小段代碼的console程序來進(jìn)行性能的分析以及改進(jìn)、直到后面的改進(jìn)前、改進(jìn)后性能比較結(jié)果。

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

復(fù)制代碼 代碼如下:

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();
            }
        }
    }

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

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

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

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

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

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

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

下邊的紅框代表相應(yīng)的代碼,并且還會紅色高亮性能損耗突出的代碼行、以及相應(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)化:

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

  修改代碼如下:  

復(fù)制代碼 代碼如下:

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 Liststring> log = new Liststring>();
        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);
        }

    }   

我們再次運(yùn)行性能分析,如下:

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

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

自定義性能分析

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

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

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

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

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

很牛b吧。

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

再說說如何對web項(xiàng)目性能分析吧...

先打開web項(xiàng)目解決方案,然后直接進(jìn)行性能分析,有人會說沒有請求操作啊,這個(gè)簡單,有多個(gè)解決辦法:

再開一個(gè)VS環(huán)境(無論是遠(yuǎn)程的還是本地的),通過web負(fù)載測試來瘋狂請求通過loadrunner/qtp來模擬請求悲催的人工請求...
您可能感興趣的文章:
  • VisualStudio 2008中常用快捷鍵
  • 使用VisualStudio開發(fā)php的圖文設(shè)置方法
  • vs.net 2010 擴(kuò)展插件小結(jié) 提高編程效率
  • 解析VS2010利用VS.PHP插件調(diào)試PHP的方法
  • VisualStudio 使用Visual Leak Detector檢查內(nèi)存泄漏
  • VS2015 免費(fèi)插件Refactoring Essentials
  • .NET Visual Studio 代碼性能分析工具
  • Visual Studio 2010 前端開發(fā)工具/擴(kuò)展/插件推薦
  • 最鋒利的Visual Studio Web開發(fā)工具擴(kuò)展:Web Essentials使用詳解

標(biāo)簽:廣元 大理 萍鄉(xiāng) 蚌埠 棗莊 江蘇 衡水 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于VS2012自帶的 性能分析 工具使用實(shí)例(圖文介紹)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    那坡县| 凤翔县| 当阳市| 江城| 吴桥县| 平乐县| 永胜县| 石河子市| 洪泽县| 琼中| 小金县| 丹阳市| 车致| 四川省| 化隆| 合肥市| 武宣县| 措勤县| 左权县| 阳朔县| 乌审旗| 莱阳市| 博兴县| 吐鲁番市| 凌源市| 余干县| 吴堡县| 清水县| 灌阳县| 望谟县| 荆州市| 宜黄县| 石狮市| 吉安县| 柏乡县| 黄大仙区| 尉氏县| 霍城县| 富阳市| 恩施市| 册亨县|