Dottrace跟踪代码执行时间
當(dāng)自己程序遇到性能問(wèn)題,比如請(qǐng)求反應(yīng)緩慢,怎么分析是哪里出了問(wèn)題呢?dottrace可以幫助.net程序跟蹤出代碼里每個(gè)方法的執(zhí)行時(shí)間,這樣讓我們更清晰的看出是哪里執(zhí)行時(shí)間過(guò)長(zhǎng),然后再分析應(yīng)該怎樣解決。
Dottrace是由JetBrainshttp://www.jetbrains.com/?公司開發(fā)的一款產(chǎn)品,它分dottrace Performance和dottrace Memory?兩個(gè)工具,dottrace Performance用來(lái)分析代碼性能,比如函數(shù)執(zhí)行時(shí)間,調(diào)用次數(shù),消耗時(shí)間比率等,dottrace Memory一般用來(lái)分析內(nèi)存占用情況。
本篇文章介紹dottrace跟蹤代碼執(zhí)行時(shí)間來(lái)分析性能問(wèn)題,因此用到的是dottrace Performance工具。它可以跟蹤.net編寫的:應(yīng)用程序,IIS掛接的程序,windows服務(wù),silverlight,WCF服務(wù)程序等。還可以把跟蹤的文件,以快照的方式保存下來(lái),保存為dtp后綴的文件。跟蹤后的結(jié)果,如果能找到對(duì)應(yīng)用戶的代碼信息,還可以直接查看對(duì)應(yīng)的源代碼,并選擇在VS里直接編輯該方法對(duì)應(yīng)的文件。
下圖為一個(gè)分析性能調(diào)優(yōu)的一個(gè)例子:
從結(jié)果可以直接看出,整個(gè)頁(yè)面加載了6.140秒,其中addPNRInfo和retrievePNR兩個(gè)方法一共都占用了5.92秒,然后就可以根據(jù)這兩個(gè)方法進(jìn)行優(yōu)化了。
現(xiàn)在講下左側(cè)Views目錄下的5個(gè)視圖欄:
l?Overview:這個(gè)可以看到該性能分析文件的抓取方式,比如上面例子為L(zhǎng)ine-by-line,Wall Time(CPU instruction)的方式,抓取的URL地址等,還會(huì)有該視圖下的系統(tǒng)配置情況以及當(dāng)前的模塊以及方法個(gè)數(shù)等信息。
l?Threads Tree:記錄當(dāng)前每個(gè)線程執(zhí)行的方法,以及方法的性能情況。
l?Call Tree:不管線程,按所有請(qǐng)求的入口為一條數(shù)據(jù)展現(xiàn),但里面展現(xiàn)的排序是按照?qǐng)?zhí)行時(shí)間高低排序的,不是按照代碼順序展現(xiàn)的。
l?Plain List:展現(xiàn)所有非內(nèi)核代碼的方法列表,并展現(xiàn)每個(gè)方法執(zhí)行時(shí)間和被調(diào)用次數(shù)。
l?Hot Spots:它會(huì)把所有代碼包括內(nèi)核代碼的方法,按照?qǐng)?zhí)行時(shí)間排序順序展現(xiàn)到列表,并記錄每個(gè)方法的執(zhí)行時(shí)間比率和時(shí)間等信息。
每次要進(jìn)行性能分析,除了選擇IIS還是應(yīng)用程序等方式外,還要選擇抓取的方式,一般的選擇界面如下:
上面是選擇抓取IIS Application程序后的選擇界面,其中重要的是下面的Profiler options選項(xiàng)。
profiling type有下面三個(gè)選項(xiàng):
l?Tracing:它是通過(guò)獲取CLR內(nèi)部一個(gè)方法開始執(zhí)行和結(jié)束執(zhí)行的時(shí)間差來(lái)計(jì)算的分析時(shí)間。
l?Line-by-line:它是通過(guò)收集代碼執(zhí)行的每條語(yǔ)句的時(shí)間來(lái),它計(jì)算出的時(shí)間更精確。
l?Sampling:它是抽樣的方式,每隔一段時(shí)間(windows下大概是10ms),會(huì)暫停所有線程,并抓取堆棧里的信息,然后計(jì)算出代碼執(zhí)行時(shí)間差,這個(gè)選項(xiàng)可能會(huì)導(dǎo)致一些執(zhí)行很短的方法抓取不到的問(wèn)題。
Measure有下面三個(gè)選項(xiàng):
l?Wall time(performance counter):?它是通過(guò)Performance Counter API來(lái)收集的信息,一般操作系統(tǒng)和各個(gè)硬件設(shè)備都提供性能計(jì)數(shù)的API供程序調(diào)用。
l?Thread time:它只支持Sampling的分析方式,它通過(guò)一個(gè)固定的線程來(lái)抓取堆棧信息計(jì)算時(shí)間,并且它只計(jì)算自己內(nèi)部程序執(zhí)行的時(shí)間,不管等待其他IO的時(shí)間。
l?Wall time(CPU instruction):它是通過(guò)讀取TSC processor register里記錄的方法進(jìn)入和退出時(shí)間差的方式來(lái)計(jì)算的。
根據(jù)上面的選項(xiàng)方式,一般我們要想完整分析自己程序的執(zhí)行時(shí)間,建議可以采用Line-byline(或Tracing)和Wall time(CPU instruction)或Wall time(performance counter)的方式,因?yàn)槿绻贸闃雍蚑hread time的搭配方式,會(huì)只計(jì)算自己內(nèi)部時(shí)間,不能計(jì)算自己程序和外部程序交互的時(shí)間,會(huì)讓自己分析性能時(shí)產(chǎn)生誤導(dǎo)。
在開始分析IIS掛接的網(wǎng)站性能問(wèn)題時(shí),用工具的File->Profile…會(huì)造成IIS應(yīng)用程序池重啟,可能時(shí)間會(huì)比較長(zhǎng),因?yàn)閮?nèi)部會(huì)預(yù)編譯和比如操作數(shù)據(jù)庫(kù),沒(méi)有開啟數(shù)據(jù)庫(kù)連接池,會(huì)影響分析的結(jié)果,誤導(dǎo)自己以為數(shù)據(jù)庫(kù)或內(nèi)核代碼導(dǎo)致性能問(wèn)題。一般應(yīng)該在第一次性能分析后,重新用Start Profiling的方式來(lái)重新測(cè)試網(wǎng)站數(shù)據(jù),如圖:
?????????內(nèi)部會(huì)有很多內(nèi)核代碼和初始化的操作會(huì)影響性能分析,這里從新點(diǎn)擊Start Profiling重新進(jìn)行性能分析,它不會(huì)重啟應(yīng)用程序池,如圖:
這樣就減少了很多初始化的耗時(shí)操作,可以更精確的對(duì)性能進(jìn)行分析了。
http://www.cnblogs.com/Lawson/archive/2011/12/18/2292045.html
總結(jié)
以上是生活随笔為你收集整理的Dottrace跟踪代码执行时间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 普贤行愿品回向文全文(普贤行愿品全文回向
- 下一篇: 上海到成都机票查询(重庆到上海机票查询)