日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】CLR Profiler 性能分析工具 (转)

發(fā)布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】CLR Profiler 性能分析工具 (转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近關(guān)注程序性能的優(yōu)化方面,本想寫篇CLRProfiler的簡要文檔,看到pengpeng已寫好,那就轉(zhuǎn)載好了,偷偷懶。

.Net的盡管擁有非常強大調(diào)試器,但也有很多局限性,只限于CLR之上,無法得到CLR的具體細節(jié),而且在多線程上就顯得很無力。
CLR在運行中隱藏了很多細節(jié),像.net語法糖上的一些細節(jié)可以通過reflector得知(.Net? 很多api在不同的版本實現(xiàn)細節(jié)也有較大的改動)CLR的運行也可以通過一些工具得到。也許你會問為什么需要知道這些細節(jié)呢?要知道.net也是有很多bug而且.Net中的BCL多數(shù)都是在CLR中實現(xiàn)的,通過他我們可以很清楚找到我們的代碼是怎么運行的,快速的找到代碼的運行瓶頸。
  這類工具有很多,如vs自帶的性能分析、Windbg、clr profiler。 vs自帶的性能分析可以很快的找到瓶頸代碼,而且支持多線程。Windbg就更彪悍了,不過使用起來就比較費勁,搭配sos,可以在運行時查看應用程序的一些狀態(tài),但沒有另外的兩種詳細。這里主要要說的是CLR Profile了,他檢測結(jié)果最為詳細,不過致命檢測會影響應用程序的運行速度而無法準確或阿爾時間上的性能測試,好像使用的人不多。有空寫寫windbg:)
????? CLR Profiler 有兩個版本,分別用于CLR1.1 和 CLR2.0,至于CLR4我試了一些也可以,但不知道是否完全兼容,分別2003,和2005 由微軟CLR性能組發(fā)布的。幾百k很小巧的工具,有給出源代碼,核心部分用C++寫的,UI使用C#編寫。CLR Profiler使用注入式測試,他會記錄每一次的內(nèi)存分配和方法調(diào)用,因而嚴重的影響程序的執(zhí)行速度,會慢10~100倍的樣子,而且無法直接附加到當前運行的進程(最新版已經(jīng)可以)。?
?????CLRProfiler 是個側(cè)重于跟蹤分析GC heap的運行情況的的工具。
????? 使用它你可以知道:
1.那個方法分配了那些類型的對象?
2.那些對象存活下來了?
3.在heap都有些什么?
4.是什么保持對象的存活?
5.在調(diào)用統(tǒng)計中可以得知方法被調(diào)用的的頻率?
6.測試應用程序,asp.net(這個我沒整有成功),和service
7.抓dump
8.提供命令行和api(沒試過)

???? 也有不足之處:
1.減緩運行速度,結(jié)果不能表明程序的速度
2.不能附加到進程
3.他因為記錄了很多內(nèi)容,如果記錄了很長的時間,分析的過程將會很久
4.也就是這個東西,只好用在測試環(huán)境,生產(chǎn)環(huán)境就得Windbg了

先給張運行截圖,在下面說面各種功能。

這是工具的主界面,start application 選擇需要運行的程序,可以選擇是否跟蹤內(nèi)存分配和方法調(diào)用。當關(guān)閉應用程序(可以自動或手動),Profiler自動開始整理結(jié)果。顯示如下:

在這里顯示本次統(tǒng)計中的匯總。

Clr Profiler有個抓Dump的功能,當然是即時性的,在程序運行時點擊show head now 即可抓取Dump同時很快的統(tǒng)計處分析結(jié)果。

如下:

?

?

?

在統(tǒng)計界面上有很多查看詳情的按鈕:

heap statistic 堆棧對象信息統(tǒng)計

Allocated :應用程序整個啟動周期內(nèi)分配的對象,按照對象大小排列,不同的顏色代碼不同的對象,這在右側(cè)會列出,沒有截出來,下面的也是這樣:

?

Relocated:重新移動過的對象,GC之后內(nèi)存整理移動過的對象:

Finally head 最終堆棧內(nèi)對象信息:

還有object finalized 和 critical object finalized,表示被終止化器終止的對象,后面那個是特殊標記過的終止對象,圖相差不大就沒有截取了。

?

?

接下來的就是垃圾回收統(tǒng)計

這個歸總了回收次數(shù)

TimeLine:這是詳細圖(貌似這個得較強的顯卡渲染,在公司那機器就出不來)

圖中可以清晰的看出各次回收時間和前后內(nèi)存占用量

?

GC Handle 統(tǒng)計GC句柄數(shù)

具體細節(jié)如下:

?

其他

summery界面沒有顯示所有的功能:

在View下面可以找到這些:

在所有的柱形圖上右鍵有如下菜單,show who allocated Is a nice one,通過他可以追蹤對象是誰分配的。

assmebly graph

class graph

call tree 這個功能記錄每個方法的調(diào)用次數(shù),感覺還是vs自帶分析好些,那個還能統(tǒng)計時間占用:)

?

和進哥說起這個CLR Profiler,說回去寫篇使用說明發(fā)出來。終于寫好了,寫篇還真花時間,這回真的理解live writer的好用,如果在網(wǎng)頁里面編輯真要死人了。

這是對CLR Profiler介紹性的文章,具體應用場景在看完應該也能想到。限于篇幅,很多內(nèi)容沒有寫出來,在卸載clr profiler中會帶有詳細的說明,100多頁,真的很詳細,有了它就沒必要再去查什么資料了。建議不明白的還是看看那個為好:)

轉(zhuǎn)自:http://www.cnblogs.com/lulu/archive/2010/08/21/1805444.html

總結(jié)

以上是生活随笔為你收集整理的【转】CLR Profiler 性能分析工具 (转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。