开源的.NET运行剖析器nprof简单使用指引
在開發.NET應用程序中,尤其是數據庫+運算密集的混合應用時,時常發現應用程序運行的不夠快,優化無疑是一個程序員不得不面臨的問題。如何找到軟件系統的瓶頸就成了擺在程序員面前的難題。微軟的Application Center Test 能夠幫助ASP.NET程序員隨時回答性能到底惡化到哪里了,但是要找出到底應用程序的那一部分導致了運行緩慢ACT卻無能為力。對于桌面型的exe應用程序,ACT就更不行了,當然有很多商業的剖析器可以回答上述問題(大多數都很貴),但最近開發的開放源代碼的nprof卻是最可行的方案。
nprof下載地址為:http://nprof.sourceforge.net/
在文章中使用nprof 0.9alpha版的bin分發運行包nprof-0.9b-alpha.zip進行講解,更新版本應該類似。
nprof解壓縮后,雙擊RegisterProfilerHook.bat注冊剖析Hook,反注冊請手工執行:regsvr32 /u bin/nprof.hook.dll
nprof同VS.NET 2003集成還有一些Bug,所以暫時不推薦運行RegisterVSNetAddin.bat。
完成上述操作后即可運行NProf.Application.exe。通過File->New菜單命令創建一個新的剖析器項目,選擇一個要分析的exe執行程序,然后創建項目即可。對話框中Common Options的兩個選項對于File項目類型都不用選。確認后按F5即可運行欲分析的exe,執行一些此exe的操作,退出后即可看到nprof詳細的剖析這次操作的數據。提醒一句,當exe程序被剖析時,文檔顯示運行速度將會比平時慢20倍左右,因為CLR的profiling API需要記錄幾乎沒一個調用的時間等等信息。
最后解釋一下剖析的結果意義來結束本文:- # of Calls:方法被調用的次數。(注意,這里方法的含義比一般.NET含義要大,包括了委托,事件,異步調用等等,因為這些在CLR看來都是方法)
- % of Total Shows in percentage:方法占總的運行時間的百分比,這里的方法運行時間由方法運行時間和創建線程運行時間兩部分組成。
- % in Method:方法運行時間占總的運行時間百分比,這里方法運行時間也包括了所有調用的子方法的運行時間。
- % in Children:方法調用的子方法占總的運行時間的百分比。
- $ Suspended:掛起時間,在你沒有使用多線程時,這里應該始終為0。
當你選擇任意的被方法名后,nprof還會在列表下方顯示被選擇方法的Calless(調用其它方法)和Callers(被其它方法調用)的一些信息,其中:
- # of Calls:調用的次數
- % of Total:在方法內,各個調用方法所占的百分比。
- % of Parent:在方法內,各個調用方法再加上父方法調用時間所占的百分比。
你也可以單擊列表列表頭,這將對此列排序,這樣更容易找到瓶頸,找到瓶頸后,就可以開始有目標的考慮如何優化應用程序了。最后提醒一句,只要應用程序足夠快就可以了,畢竟客戶很少會為快一倍的應用程序多付一倍的錢,而要讓應用程序快一倍所付出的努力卻往往不只一倍。
總結
以上是生活随笔為你收集整理的开源的.NET运行剖析器nprof简单使用指引的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在我的网站上开通了WebPart演示和下
- 下一篇: GCDPlot 0.31 发布