應用程式效能分析利器 —— Visual Studio Profiler

來源:互聯網
上載者:User

有一種速度叫做龜行,有一種感覺叫做無法忍受,有一種願望叫做效能提升,有一種困難叫做尋找瓶頸。

 

所有人都希望自己的程式能夠飛速運行,但是效能的提升又是何等艱辛,就連起步都那麼困難。浩如煙海的代碼,哪一段才是效能提升的關鍵?哪一段才是程式啟動並執行瓶頸?難道你只能通過在每個函數前後都添加一段時間輸出來尋找耗時最長的函數嗎?你應當相信,在這個資訊化的時代,在這個效率為先的時代,也許每一個需要重複的工作,都會有一種自動的方式來替代。下面,我將為你介紹一個尋找應用程式瓶頸的分析利器—— Visual Studio Profiler。

 

既然它的名字以VisualStudio開頭,那麼它一定與VS有著什麼聯絡了。沒錯,Profiler是Visual Studio中提供的一個分析工具,在主菜單中的Analyze選項中。如果你發現沒有這個選項,那麼,你需要安裝一個更為強大的VisualStudio版本。Team系列的VS才會有這個工具的安裝。在VS8.0(2005)版本中,Visual Studio Team Edition 配有這個工具;VS9.0(2008)中,Visual Studio Team System DevelopmentEdition
和 VisualStudio Team Suite 配有這個工具,而在VS2010中,當然是Ultimate配有此工具了。

 

Profiler很強大,你可以用他分析一個二進位檔案,可以用他分析一個工程,也可以用他分析一個網站。無論是C#、VC還是VB,它能很好的分析。

 

你可以用Profiler對一個Target做很多事情。最重要的當屬函數執行時間的分析,Profiler會給出函數的執行時間,執行次數,執行時間占整個程式的百分比;更強大的是,他可以給出一個調用樹,這樣,你可以在Profiler中查看這個程式到底是如何被一步步調用的。查看的過程中,你還能看到這些函數的執行百分比,你可以非常方便的找到最耗時的函數。一層層的查下去,原來瓶頸就是那個你可能都沒有正眼看過的小函數。感謝Profiler,你可以有目的的最佳化你的程式了。

 

最佳化以後,你總得看看效果吧,於是再利用Profiler進行分析,然後呢?Profiler提供結果比較功能,很好很強大。你可以通過這個功能看看你的程式,哪些函數的執行效率提升了,哪些又降低了。很方便。

 

不管怎樣,有效分析是Profiler最大的特點。於是Profiler提供了兩種分析模式供你選擇:Sampling 和 Instrument。

 

Sampling就是採樣。通過在程式運行過程中暫停程式,記錄堆棧中的資訊,然後恢複程式來剖析器。不要看它會暫停程式,它的這種暫停、記錄、恢複的速度是非常迅速的,相對於程式的執行時間可以忽略不計。因此這種模式對程式執行的影響其實是相對較小的。但是由於採樣的時間間隔,有些小的執行迅速的函數可能被忽略,不過,如果是為了效能的提升,那些速度快的函數到並沒有什麼分析價值。另外一點,因為採樣時間是系統的時間,在分析過程中會受到其他程式的影響。比如你在分析過程中開啟一個虛擬機器,也許,那段時間被執行的函數就背上了運行緩慢的黑鍋。所以,若要精確分析,就需要Instrument了。

 

Oh my god,Instrument執行過程超級緩慢,比軟體龜行的速度慢多了,這麼慢,幹了什嗎?它在程式運行以前,侵入程式中,在每個函數的開頭和結尾都嵌入了用於分析的宏。在執行函數的過程中記錄下宏傳出來的資訊。Instrument的分析用了兩套時間。一套和Sampling一樣,使用的函數實際執行時間,叫做Application Time;另一套使用的是Profiler自行提供的時間單位,以程式執行的CPU時間片為基元計算出函數的CPU佔用時間,稱為Elapsed Time。你可以根據你的需要查看相應的執行時間,因為Instrument提供的Elapsed
Time,你將有足夠的證據證明軟體緩慢速度的罪魁禍首,有這樣鐵證的提供,緩慢的分析速度又何懼呢。

 

在對程式執行過程的分析結束後,Profiler會對剛剛取得的大量資料進行處理,計算函數的執行時間,調用次數,以及函數之間的相互調用關係等資訊。最後會得出一份報告。你擁有報告查看模式的選擇權利,你可以選擇Summary, Call Tree, Modules, Caller/Callee, Functions, Marks 等等模式來查看這個分析的結果。

 

有時候你會發現,後期的資料處理怎麼如此緩慢呢?有兩個原因,第一,確實需要分析的內容太多,程式太大,為了這個龐大軟體的更好運行,就忍忍吧,喝杯茶,吃個飯再回來看結果,另外一種可能,你分析了太多你不需要分析的資料。作為Visual Studio的一個組件,Profiler當然會提供人性化的選項:Launch with profiler paused。這個選項讓你可以忽略不想分析的程式開啟過程。直到你需要分析時,Resume之,不需要的時候又可以Pause。為什麼有這些選項?因為時間要花在刀刃上……

 

另外,分析結束後就關掉VS嗎?必然不是,一般來說,你當然想要留存一個分析的結果的備份。可是一看產生的那個vsp檔案(vsprofiler),幾百M甚至上G,你寒心了。於是VS Profiler又提供了一個人性化的選項:Save Analyzed,這個選項在哪?根據可視化編程的原則,當然放在了分析結果(report)的右鍵菜單中。儲存的結果是一個vsps的檔案(你可以自己想想這尾碼名什麼意思)。如果你還嫌大,那麼你可以export。匯出成csv檔案或者xml檔案,他們雖然沒有那麼豐富的結果查看模式,但是作為效能提升的憑據,應該足夠了。

 

突然發現,囉囉嗦嗦寫了這麼多,只是簡單的介紹了一個Profiler的常用功能,具體怎麼用,還有哪些用得少的小功能,都是一些簡單的問題,你可以自己去探索。當然我建議你從以下一篇文章開始你的Profiler之旅:《Find Application Bottlenecks with Visual Studio Profiler》,http://msdn.microsoft.com/en-us/magazine/cc337887.aspx這是微軟MSDN雜誌對Visual
Studio Profiler的詳細介紹。從軟體發展現狀到Profiler介紹到Profiler的使用執行個體。圖文並茂,它也有中文翻譯版本:http://msdn.microsoft.com/zh-cn/magazine/cc337887.aspx,你若不喜歡看長篇英文,這個翻譯版本也是個不錯的選擇。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.