從 Unit Test 中 Profile 您的程式,了解效能瓶頸在那裡。

從 Unit Test 中 Profile 您的程式,了解效能瓶頸在那裡。

前言

雖然在台灣真正的寫 Unit Test 的團隊還是少數,漸漸地大家都知道重要 Unit Test 的重要。UT 可以很快速地驗證程式正確性,尤其是在導 Agile 的團隊更是重要。因為品質是軟體本身最基本中的基本要求之一。

 

從 VB6 時代開始在專案中我會盡量地針對關鍵性的程式中寫 Unit Test 來驗證一些跟金額有關的商業性邏輯,當然到了 .NET 更是用 Unit Test 針對專案的測試涵蓋率進行驗證,以確保程式每一個 part 都可以如我的預期執行。

 

雖然在 UT 的 Explorer 都可以看到每一個 Test Method 花費了多少時間,但想要分別 Profile 程式碼卻還是要單獨走 Profile 精靈和功能。所以開發人員在跑 UT 時壓根就不會去做 Profile 的動作,因為會中斷開發人員的思緒,工作效率就會大打折扣。

image

 

 

讓工具整合 Unit Test 和 Profile

現在 VS 2012 在 Test Explorer 可以讓開發人員針對某個 Test Method 直接去 Profile Test 的項目,讓開發人員可以在一個地方直接分析。重點是可以讓你在系統沒有任何介面的情況下直接分析效能,而不用跑一整個操作情況就只為了看中間某一段效能報告,參雜了其他你不要的分析資料。

image

一個步驟搞定!

image

馬上跑出 Profiling Report

image

看到 Method 透過 Linq 語法取資料每個步驟的過程所耗損的效能比例

image

可以看到 ToList 佔的比例還比 Select 略高一點點

image

也就是說為了 ToList 我的程式效能增加了不少,所以我的程式調校的部分就要思考是不是有必要一定要轉成 List 。

這點可以讓開發人員在程式調校上可以更深入對自已寫的程式有進一步的了解和體認

 

參考

 

Potential Performance Issues with Compiled LINQ Query Re-Compiles

http://blogs.msdn.com/b/appfabriccat/archive/2010/08/06/potential-performance-issues-with-compiled-linq-query-re-compiles.aspx

Increase LINQ Query Performance

http://msdn.microsoft.com/en-us/magazine/cc721610.aspx