Windows Phone 7 程式碼效能分析器

  • 6212
  • 0

Windows Phone 7 程式碼效能分析器

    每當我們在開發程式時很少會去分析我們撰寫函式所花費執行時間,只有在客戶覺得太慢才會想要跑一下執行的時間效率,相信大部份的人都是採用 Stopwatch 類別來測試程式執行效率如下圖所示,可是如果一個很大的系統要插入多少的Stopwatch語法才能達到想要的秒差,測完後還要把這些測試語法移除實在有夠費時,這時候如果能來一個自動分析器不用修改程式碼該有多好。

image image

    最近在網路上發現一個非常好用的工具Profiler如下圖網頁畫面,可以針對WP7來測試執行時間效率,這套分析工具不只可分析WP7他還支援下列平台所開發應用程式:

  • Full .NET 2.0 and above
  •  

  • Windows Phone 7, both Silverlight and XNA apps
  •  

  • Silverlight 2.0 and above
  •  

  • NET CF 2.0 and above (WinCE, Windows Mobile)
  •  

  • Xbox XNA, ASP.NET, .NET services

    不過這套工具針對Windows Phone 7 有幾個限制:

    • Only WP7 Silverlight apps are supported for now, not WP7 XNA apps
    • Constructors are not timed due to a WP7 IL-verifier problem
    • The profiler cannot at present take an automatic snapshot when the WP7 app closes, so you must take snapshots manually during the execution.
    • WP7 is very new technology; the APIs may change and potentially break the profiler. We'll strive to stay ahead and appreciate any WP7-feedback from you all.

     

    image

        首先連線到官方網頁下載免錢的版本來試玩一下,接著注冊一下輸入名字、公司名、郵件完成注冊後會發一封郵件給你裡面包含載點。

    image

         將mail裡面的載點網頁開啟下載此安裝檔自已的電腦裡面。

    image

      1.用滑鼠點二下下載回來的安裝檔EQATECProfiler.msi,按下Next鍵

    image

    2.點選 I Agree在按下Next鍵

    image

    3.選擇安裝檔案路徑,如不採用預設值就直接按下Next

    image

         4.打鉤解除防火墻初始化阻擋,接著在按下Next

    image

        5.最後按下Next就會開始執行安裝作業

    image

        6.安裝結束按下Close離開此安裝畫面

    image

        接著我就帶大家來跑一次如何使用此分析工具,先來做一個測試用範例程式打開vs2010開發工具新增一個Windows Phone 7應用程式,在MainPage畫面上拉上二個元件一個為TextBox、Button,在Button鍵的Click事件去執行test函式,此函式使用迴圈來做字串累加一千次放到TextBox元件顯示,簡單的範例凸顯函式執行時間效率。

     

    image

    image

        開啟分析工具點選開始\EQATEC\Profiler\EQATEC Profiler,首先按下Browse鍵挑選應用程式目錄,就是上面圖片所述的Windows Phone 應用程式建置完整執行檔dll目錄匣。基本上只要挑選此目錄會自動幫你將執行檔鉤選,接著在按下Build鍵此分析會開始分析此應用程式的相關訊息,顯示在Build profiled version下的空白處,如果分析成功無錯誤訊息在來按下Run app鍵。

    image

  •  

     

        按下Run app 鍵會跳出Deploy對話方塊,如果有實機就選Device沒有實機就選Emulator選好後就按下Run鍵


    image

    在按下Run鍵離開對話方塊這時候分析器就會開始佈署程式進行執行時間效率記錄,當程式開起來就可以開始從頭到尾把你應用程式跑一次,記得跑完後不要結束此應用程式。

    image

      接著跑完應用程式後回來EQATEC Profiler界面按下畫面中Take snapshot鍵取回剛才所執行所有動作時間記錄,這時候在View snapshot reports會多一筆記錄這個log檔案可以選擇要存放至你想要的目錄點一下左下方的Open folder鍵就可以變更記錄存放位置,當我們產生了Log接下來就點一下此Log檔在按一下View鍵

    image

    接著我們Log檔所顯示應用程式每個函式所花費的執行時間,以及事件所包含引用那些函式,在下面圖中Summary of method call times清單上可以看到執行方法所需花費時間,就下面顯示我們做的應用程式耗費最時間是MainPage.test需4753毫秒實在是太慢了,所以我們就可以很清楚的那個方法是最耗時間,針對該方法去調整。

    image

    針對剛才上圖所做出來的效能測試做一下程式碼調整,重新修改一下程式代碼不用String類別來字串相加,改用StringBuilder類別所提供的方法Append相加字串,看看效果如何。image

    當程式修改完後,按照剛才最上面所描述畫面重頭在跑一次跑完後在按一下Take snapshot鍵,這時候View snapshot reports清單會顯示新增記錄檔,一樣點選這筆新增記錄在按下View鍵來看一下結果如何。

    image

    這次修改用StringBuilder只花了153毫秒實在是差很大,所以這個工具是方便用來讓我們知道我們所寫出來的方法執行上需要用掉多少時間,方便我們知道整個系統要做效能改善是在那一個開鍵點。

    image

    接著我們可點選Compare頁面進行二次執行記錄比較,把剛才我們所做的執行記錄檔點選進來就可以看到分析器做的比較表如下圖所示,可以了解到我們版更後執行效能是否有差異,透過這個比較表格也很清楚程式修改完系統執行效能那個結點是否有變差或是變好。

    image

     

    這個工具還不錯用他提供相關API可以寫程式來截取想要資訊,操作界面不複雜很簡單易懂且支援平台也很多,相信很多PM使用這套工具來測試自已團隊或是外包的程式就知道整個系統執行效能如何。