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

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