原文地址:http://www.cnblogs.com/kevinlzf/archive/2010/11/12/1876066.html html
下載地址:http://www.microsoft.com/en-us/download/details.aspx?id=16273 CLR Profiler for .NET Framework 4api
最近關注程序性能的優化方面,本想寫篇CLRProfiler的簡要文檔,看到pengpeng已寫好,那就轉載好了,偷偷懶。多線程
.Net的儘管擁有很是強大調試器,但也有不少侷限性,只限於CLR之上,沒法得之CLR的具體細節,並且在多線程上就顯得很無力。CLR在運行中隱藏了不少細節,像.net語法糖上的一些細節能夠經過reflector得知(.Net 不少api在不一樣的版本實現細節也有較大的改動)CLR的運行也能夠經過一些工具獲得。也許你會問爲何也知道這些細節呢?要知道.net也是有不少bug並且.Net中的BCL多數都是在CLR中實現的,經過他咱們能夠很清楚找到咱們的代碼是怎麼運行的,快速的找到代碼的運行瓶頸。
這類工具備不少,如vs自帶的性能分析,Windbg,clr profiler。 vs自帶的性能分析能夠很快的找到瓶頸代碼,並且支持多線程。Windbg就更彪悍了,不過使用起來就比較費勁,搭配sos,能夠在運行時查看應用程序的一些狀態,但沒有另外的兩種詳細。這裏主要要說的是CLR Profile了,他檢測結果最爲詳細,不過致命檢測會影響應用程序的運行速度而沒法得之時間上的性能測試,好像使用的人很少。有空寫寫windbg:)
CLR Profiler 有兩個版本,分別用於CLR1.1 和 CLR2.0,至於CLR4臥試了一些也能夠,但不知道是否徹底兼容不,分別2003,和2005 由微軟CLR性能組發佈的。幾百k很小巧的工具,有給出源代碼,核心部分用C++寫的,UI使用C#編寫。CLR Profiler使用注入式測試,他會記錄每一次的內存分配和方法調用,於是嚴重的影響程序的執行速度,會慢10~100倍的樣子,並且沒法直接附加到當前運行的進程。
CLRProfiler 是個側重於跟蹤分析GC heap的運行狀況的的工具。
使用它你能夠知道:
1.那個方法分配了那些類型的對象?
2.那些對象存活下來了?
3.在heap都有些什麼?
4.是什麼保持對象的存活?
5.在調用統計中能夠得知方法被調用的的頻率?
6.測試應用程序,asp.net(這個我沒整有成功),和service
7.抓dump
8.提供命令行和api(沒試過)app
也有不足之處:
1.減緩運行速度,結果不能代表程序的速度
2.不能附加到進程
3.他由於記錄了不少內容,若是記錄了很長的時間,分析的過程將會好久
4.也就是這個東西,只好用來測試環境,生產環境就得Windbg了asp.net
先給張運行截圖,在下面說面各類功能。工具
這是工具的祝界面,start application 選擇須要運行的程序,能夠選擇是否跟蹤內存分配和方法調用。當關閉應用程序(能夠自動或手動),Profiler自動開始整理結果。顯示以下:性能
在這裏顯示本次統計中的彙總。測試
Clr Profiler有個抓Dump的功能,固然是及時性的,在程序運行時點擊show head now 便可抓取Dump同時很快的統計處分析結果。優化
以下:.net
在統計界面上有不少查看詳情的按鈕:
heap statistic 堆棧對象信息統計
Allocated :應用程序整個啓動週期內分配的對象,按照對象大小排列,不一樣的顏色代碼不一樣的對象,這在右側會列出,沒有截出來,下面的也是這樣:
Relocated:從新移動過的對象,GC以後內存整理移動過的對象:
Finally head 最終堆棧內對象信息:
還有object finalized 和 critical object finalized,表示被終止化器終止的對象,後面那個是特殊標記過的終止對象,圖相差不大就沒有截取了。
接下來的就是垃圾回收統計
這個歸總了回收次數
TimeLine:這是詳細圖(貌似這個得較強的顯卡渲染,在公司那機器就出不來)
圖中能夠清晰的看出各次回收時間和先後內存佔用量
GC Handle 統計GC句柄數
具體細節以下:
其餘
summery界面沒有顯示全部的功能:
在View下面能夠找到這些:
在全部的柱形圖上右鍵有以下菜單,show who allocated Is a nice one,經過他能夠追蹤對象是誰分配的。
assmebly graph
class graph
call tree 這個功能記錄每一個方法的調用次數,感受仍是vs自帶分析好些,那個還能統計時間佔用:)
和進哥提及這個CLR Profiler,說回去寫篇使用說明發出來。終於寫好了,寫篇還真花時間,這回真的理解live writer的好用,若是在網頁裏面編輯真要死人了。
這是對CLR Profiler介紹性的文章,具體應用場景在看完應該也能想到。限於篇幅,不少內容沒有寫出來,在卸載clr profiler中會帶有詳細的說明,100多頁,真的很詳細,有了它就不必再去查什麼資料了。建議不明白的仍是看看那個爲好:)
轉自:http://www.cnblogs.com/lulu/archive/2010/08/21/1805444.html