你們都知道.net有一套本身的內存(垃圾)回收機制,除非有一些數據(方法)長期佔有內存不隨着垃圾回收功能而釋放內存,這樣就形成了咱們常常說的內存泄露、內存持續增加得不到釋放等問題致使APS.NET網站或者C/S應用程序的用戶沒法正常使用。最終會致使用戶經過客服人員或者技術支持人員投訴公司的技術部門,造成一連串的未知的不良反映。java
無論哪位性能測試人員,遇到這樣的問題都是摸不着頭腦,不知從何處下手。.net環境中不像Java有那麼多的工具能夠支撐,好比性能測試常常用到的Jconsole、Jprofiler等工具,而且基於JAVA運行環境的在打印GC日誌方面也很強大。對於.net平臺,微軟也提供的.net輔助工具CLR Profiler能夠很好的幫助咱們的性能測試人員以及研發人員,找到內存沒有及時回收,佔着內存不釋放的方法(詳細到這個方法下面定義的數組或者其餘變量)。web
下載地址:http://search.microsoft.com/en-us/DownloadResults.aspx?q=clr%20profilersql
可根據本身電腦.NET的版本下載相應的CLRProfiler,我下載的是CLR Profiler for .NET Framework 4版本的。數組
下載後提示解壓縮,選擇要加壓到的目錄;而後進入D:\SoftWare\CLRProfiler4\CLRProfiler\Binaries目錄下選擇對應操做系統64位或者32位的CLRProfiler.exe。
在說一下,CLRProfiler能夠分析.net平臺開發的幾乎全部的產品,包括C/S應用程序、服務和asp.net編寫的網站等。服務器
說明:該工具適用於性能測試瓶頸定位,作性能測試時不建議開啓,須要安裝在應用服務器所在服務器(iis和.netframework已經安裝好)asp.net
個人測試環境是:IIS服務器(asp.net開發的站點)+MS sqlserver工具
打開CLRProfiler界面,選中Profiling active、Allocation和Calls,【Start Application】是加載.net開發的exe程序的;【Start URL】是輸入被測頁面URL的;sqlserver
在IE中測試asp.Net開發的頁面,CLRProfiler首先要加載IIS所須要的環境變量,CLR Profiler而後提示你加載ASP.NET應用程序和等待ASP.NET工做進程啓動。性能
在File菜單中點擊Profile ASP.NET測試
中止IIS服務可能要很長時間,須要耐心等待。最後提示能夠測試頁面啦
「Waiting for ASP.NET to start common language runtime - this is the time to load your test page」
點擊【Start URL】按鈕,輸入咱們要測試的頁面URL,點擊OK,就會自動打開咱們要檢查內存有不釋放內存的頁面,多在頁面中使用一會,以便CLR Profiler收集更多的數據。
當已完成頁面的運行,請點擊CLR Profiler窗口中的 【Kill ASP.NET】。而後CLR Profiler自動關閉IIS,移除環境變量,重啓IIS。
點擊【Allocation Graph】打開內存分配視圖,在這個視圖當中咱們能夠看出堆棧是如何分別對象的
點擊【Objects by Address】按鈕將會顯示各類方法在內存中佔用的直方圖界面
能夠經過選中那個視圖中的某一個柱形條,右擊show who allocated。點擊這個菜單項顯示關於所選分配的特定詳細內容,而不是全部分配的
點擊[TimeLine]按鈕,在打開的圖片中能夠清晰的看出各次回收時間和先後內存佔用量狀況
在view菜單中,有不少沒有顯示的菜單。
點擊call tree 菜單,能夠看到在不一樣線程下,全部方法佔用內存大小,被調用次數等信息