注意:在做基于VS2005 開發(fā)的網(wǎng)站分析的時(shí)候,dottrace 必須打開IIS的對(duì)應(yīng)該的網(wǎng)站,他不能打開VS2005 打開的程序
?
?
性能分析(Performance Profiling):在dotTrace中在被測(cè)試程序中當(dāng)某些特定操作持續(xù)的時(shí)間.可以
-
定位運(yùn)行最慢的代碼(Locate the slowest-running parts in your co
de) - 找出性能瓶頸的制約(Identify performance bottlenecks down to any particular function)
- 觀察單個(gè)函數(shù)花費(fèi)的CPU時(shí)間(Focus on a function to see what makes it consume CPU time)
- 理清復(fù)雜的遞歸調(diào)用(Untangle complex recursive calls)
- 比較前后時(shí)序優(yōu)化功能(Compare function timings before and after optimization)
性能分析包括幾個(gè)分析方法,每一個(gè)都有其特定的用途。
-
跟蹤分析 vs 抽樣分析(Tracing Profiling vs Sampling Profiling)
-
Measuring Wall Time vs Thread Time
-
即時(shí)內(nèi)聯(lián)
內(nèi)存分析:衡量分配的內(nèi)存量和應(yīng)用程序的對(duì)象釋放。可以:
- 獲取有關(guān)內(nèi)存使用全面統(tǒng)計(jì)
- 查看哪些類和消費(fèi)最多的內(nèi)存空間
- 確定舉行可達(dá)對(duì)象為某對(duì)象
- 分析源垃圾發(fā)電
會(huì)話分析:在同一段時(shí)間內(nèi)的分析的應(yīng)用程序的不同方面。分析會(huì)話可通過dotTrace用戶界面,或命令行或API運(yùn)行
快照:是一個(gè)文件,包含由dotTrace分析期間保存的數(shù)據(jù),用視圖表示。這些數(shù)據(jù)包括等參數(shù):
- 函數(shù)的執(zhí)行時(shí)間
- 函數(shù)調(diào)用次數(shù)
- 函數(shù)占總花費(fèi)時(shí)間的百分比
- 對(duì)象包含類的個(gè)數(shù)
- 對(duì)象分配的內(nèi)存
- 擁有的對(duì)象個(gè)數(shù)
- 占用的內(nèi)存?
快照視圖:是一個(gè)快照數(shù)據(jù)的可視化表示(期間收集到的分析會(huì)話),可從不同角度分析結(jié)果。 dotTrace提供了幾視圖
-
性能分析視圖
- 調(diào)用樹視圖:樹般的呼吁所有可執(zhí)行的功能分組分析會(huì)話期間,他們可以通過線程或所有線程分組
- 平面視圖:查看會(huì)話期間所有方法或函數(shù)調(diào)用
- 熱點(diǎn)視圖:查看會(huì)話期間時(shí)間花費(fèi)最多的函數(shù)和方法
-
反向視圖:查看調(diào)用選定函數(shù)的函數(shù)
-
內(nèi)存分析視圖
- 類列表:內(nèi)存分析的的默認(rèn)視圖,準(zhǔn)確統(tǒng)計(jì)對(duì)象的數(shù)量和程序中各個(gè)類分配的內(nèi)存量
- 命名空間樹:按命名空間分組對(duì)象
- 外引用:顯示引用外部對(duì)象的對(duì)象引用
- 內(nèi)引用:顯示對(duì)該對(duì)象的引用
- 分配樹:以樹結(jié)構(gòu)顯示分配到該對(duì)象的函數(shù)。
過濾:顯示或隱藏特定函數(shù)。請(qǐng)參閱創(chuàng)建和應(yīng)用過濾器。
打開獨(dú)立的標(biāo)簽窗口:對(duì)于CPU快照,可以為一個(gè)函數(shù)打開一個(gè)新的標(biāo)簽窗口來顯示函數(shù)花費(fèi)CPU的時(shí)間率;對(duì)于內(nèi)存快照,可以分析內(nèi)存查看引用,查看靜態(tài)數(shù)據(jù)等。Opening in a New Tab
為CPU快照,另開一個(gè)新標(biāo)簽上顯示的功能是指一個(gè)函數(shù),作為一個(gè)消耗100%的資源根源的CPU一定比例的信息。
內(nèi)存快照,揭開了新標(biāo)簽組對(duì)象使您可以分析內(nèi)存:鑒于參考,研究統(tǒng)計(jì)等
見打開在新標(biāo)簽。
折疊
dotTrace因此可以折疊遞歸調(diào)用,過濾來電。
折疊遞歸調(diào)用幫助用戶有效地分析遞歸算法的性能。見折疊遞歸調(diào)用。
折疊式過濾要求,確定可以在代碼的部分,感興趣的用戶的性能瓶頸。見折疊濾波呼吁。
垃圾收集器
垃圾回收器回收的企圖是不會(huì)被應(yīng)用程序使用的對(duì)象使用的內(nèi)存。見顯示垃圾信息。
舉行可達(dá)的對(duì)象
一個(gè)對(duì)象是持有另一個(gè)對(duì)象,如果它仍然未引用時(shí),引用對(duì)象被刪除。舉行內(nèi)存是由持有對(duì)象分配的內(nèi)存量。
可到達(dá)的對(duì)象是從另一個(gè)對(duì)象,如果存在一些應(yīng)用程序中的名稱,導(dǎo)致它,直接或通過其他到達(dá)對(duì)象的引用。
見查看舉行可達(dá)的對(duì)象。
種對(duì)象
活動(dòng)對(duì)象:對(duì)象,在得到一個(gè)內(nèi)存快照的時(shí)刻存在。
新的對(duì)象:對(duì)象不存在時(shí),內(nèi)存的標(biāo)志,而是由獲得快照那一刻出現(xiàn)。
死對(duì)象:對(duì)象時(shí)存在內(nèi)存的標(biāo)志,而是由獲得快照那一刻死亡。
垃圾:對(duì)象的分配和內(nèi)存之間的標(biāo)識(shí)和獲取快照垃圾收集器收集。
最后確定的對(duì)象:對(duì)象的定稿(處置終結(jié))(見最后審定并最終確定對(duì)象)。
見差異獲取內(nèi)存國(guó)模式,在內(nèi)存中篩選國(guó)家和查看最終確定對(duì)象的差異。
最后審定并最終確定對(duì)象
解釋確定物體的概念,讓我們定義定稿。當(dāng)從根不強(qiáng)引用仍然是一個(gè)對(duì)象,并在垃圾收集器收集它,該對(duì)象可最后定稿。在。NET,對(duì)象只有在完成覆蓋Object.Finalize()方法。
注意:在C#中有沒有辦法覆蓋Object.Finalize()方法。相反,它可以創(chuàng)建一個(gè)析構(gòu)函數(shù)。在編譯時(shí),編譯器創(chuàng)建一個(gè)方法,載有析構(gòu)函數(shù),它調(diào)用的Finalize()基類的方法,然后執(zhí)行析構(gòu)函數(shù)的代碼。
然而,使用析構(gòu)函數(shù)的缺點(diǎn)是,他們是在一個(gè)不確定的時(shí)間要求。因此,它不是一個(gè)析構(gòu)函數(shù),而是Dispose()方法,通常用于為那些不再需要免費(fèi)資源。在Dispose()方法被調(diào)用,你應(yīng)該當(dāng)你不再需要的對(duì)象。如果你忘記調(diào)用它時(shí),該方法將調(diào)用相應(yīng)的Finalize()方法。然而,這是一個(gè)不好的做法留給到終結(jié),因?yàn)樵谛阅茌^低,效益低的應(yīng)用程序的內(nèi)存使用此結(jié)果。
為了解決這一問題,dotTrace可以檢測(cè)到定稿對(duì)象。對(duì)于其中的一些,你會(huì)發(fā)現(xiàn),他們沒有明確處理在您的代碼。
?
?
從VS2005開始,就自帶了一個(gè)不錯(cuò)的性能分析工具Performance Profiler。但是在使用的過程中,經(jīng)常有程序崩潰的情況出現(xiàn),特別是在分析IIS的 web程序時(shí)。在微軟的論壇上,也看到很多外國(guó)的朋友報(bào)過這樣的錯(cuò)誤。所以就使用了第三方的工具dotTrace。
?? ? ?市面上有很多性能的Profiler工具,AQ Time,ANTS Profiler,Speed Trace Profiler.但是分析的原理跟方法論基本都是一致的。以分析IIS的web程序?yàn)槔赿otTrace中啟動(dòng)Profiler,它會(huì)重新啟動(dòng)IIS,Attach到進(jìn)程中(IIS5為aspnet_wp.exe),然后運(yùn)行需要分析的程序,Get Snapshot,然后我們就可以得到一個(gè)分析的結(jié)果。關(guān)鍵的問題是,我們?nèi)绾卫媒Y(jié)果迅速的找到性能瓶頸。
?? ? ?1.Hot Spots視圖。這個(gè)視圖根據(jù)耗時(shí)從大到小排序了所有的方法。我們可以馬上發(fā)現(xiàn)耗時(shí)最長(zhǎng)的方法。總共有兩種情況:
?? ? ? ? ? ?1.1該方法被調(diào)用次數(shù)非常少,但是非常耗時(shí)。這時(shí)馬上得出結(jié)論,該方法就是性能瓶頸。記錄下來,分析代碼。
?? ? ? ? ? ?1.2該方法被調(diào)用次數(shù)很多。此時(shí)就需要使用另一個(gè)視圖:Back Trees
?? ? ?2.Back Trees視圖。這個(gè)視圖通常是用來分析一個(gè)被調(diào)用很多次的函數(shù)的Callee,因?yàn)橐话銇碚f,一個(gè)函數(shù)被調(diào)用多次,一般是在某一個(gè)Callee中有一個(gè)循環(huán)或者遞歸 ,而性能調(diào)優(yōu)的入口是這個(gè)Callee函數(shù),而不是被調(diào)用者本身。(其實(shí)Hot Spots本身也是Back Tree,只是我們可以單獨(dú)把一個(gè)函數(shù)在一個(gè)Tab頁(yè)中開打,然后使用Back Tree單獨(dú)分析)
?? ? ?3.Plain List視圖。有時(shí)候,我們會(huì)發(fā)現(xiàn),在Hot Spots里會(huì)出現(xiàn)很多系統(tǒng)函數(shù),比方Linq的操作,這時(shí)如果函數(shù)太多,也許對(duì)定位不方便。這時(shí)可以使用 Plan List 視圖,它只顯示過濾以后的函數(shù),然后根據(jù)Own Time進(jìn)行排序,找出耗時(shí)最長(zhǎng)的函數(shù)。但是,如果一個(gè)耗時(shí)的函數(shù)都沒發(fā)現(xiàn),就很有可能是由于資源的操作導(dǎo)致性能下降,比如循環(huán)調(diào)用Linq操作,或者發(fā)送郵件一直等待等原因。
?? ? ?4.Call Tree視圖。在dotTrace中,Call Tree中的每一個(gè)函數(shù)的子函數(shù)并 不是按照調(diào)用順序來排列的,而是根據(jù)耗時(shí)百分比來排列的。 (如果要查看函數(shù)的子函數(shù)執(zhí)行順序,在Plain List中查看)。這樣的話我們可以快速的定位到下一個(gè)Important Call,并且dotTrace還提供了快捷鍵ctrl+shift+->(右箭頭)。但是Call Tree視圖對(duì)于分析有個(gè)不好的地方,就是某個(gè)函數(shù)也許會(huì)在不同的分支被循環(huán)調(diào)用,這時(shí)使用Call Tree是非常難發(fā)現(xiàn)的,這也是Back Tree存在的意義。
?? ? ?另外,dotTrace4.0還有遠(yuǎn)程調(diào)試的功能,這對(duì)于調(diào)試集成環(huán)境應(yīng)該是很有用的。?
?? ? ?補(bǔ):我看到CSDN有朋友說,dotTace跟蹤Windows From的程序發(fā)現(xiàn)子函數(shù)加起來的時(shí)間跟遠(yuǎn)小于父函數(shù)的時(shí)間,那是因?yàn)閐otTrace的過濾功能, 只要點(diǎn)擊百分?jǐn)?shù)前面的小圖標(biāo)“unfold filtered calls”,就能把所有過濾掉的函數(shù)顯示出來。實(shí)際上,該朋友碰到的情況是,dotTrace過濾掉了Application.Run()函數(shù)調(diào)用的消息循環(huán)函數(shù)RunMessageLoop。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
