- 本篇針對 Sweetshot 這個 App 的開發經驗做分享 -

(Develop with Windows Phone SDK 8.0 on Visual Studio 2013 Ultimate)

Visual Studio 有很棒的效能檢測工具讓開發者使用 :

App profiling  

但剛開始開發 App 的時候都沒有用, 直到 App 近乎完成在做大量的整合測試的時候發現會一直發生 OOM (Out of Memory) Exception.

問題來了, 是什麼原因導致 OOM ?! 可能因素非常多..  有可能是 Memory Leak, 有可能是一瞬間載入太多的 Data ..

因為 Sweetshot 是一款照片上傳, 呈現的 App, 會用到很多的 BitmapImage ..

Sweetshot  

BitmapImage 又是非常的吃記憶體, 因此 Alan 便開始展開漫長的 Performance Tuning (效能調教) 的過程 :

1. 分別測試單一功能運行時的效能

2. 測試功能串接後的效能

後來發現問題在於 :

1. Server 端沒有存照片的縮圖, 所以當我向 Server 要圖的時候都是給我原始解析度而不是我畫面上顯示所需要的 100*100 之類的小圖, 導致一次載入多張圖檔的時候瞬間就頂到單一 App 的記憶體上限 (512MB 的裝置上限為 150MB, 1GB 的裝置上限為 300MB)

2. 當在使用 Image control with BitmapImage 的時候, 當 Image control 被消滅但其 Source : BitmapImage 不會馬上被消滅

解決方案 :

1. 從 Server 下載原圖, 然後存成兩張.. 一張小張的縮圖和一張原圖, 在上傳照片到 Server 的時候也是, 存小張的圖和縮過的圖在 local 端, 並上傳需要雲端分享的 Copy 到伺服器上保存 (short term solution)

2. 在 release Image 的時候要對其 Source 做特殊的 Dispose 處理

心得 :

效能調教最好在前期就開始進行, 這樣在有發生 Memory Leak 的時候可以及早發現並解決, 假如等到 App 都架構完成了, 會比較不容易找到問題並解決問題, 專案時程上也會因為效能這程咬金變得棘手導致加班爆肝的機率變高

------------------

Thinking.jpg 

筆者:Alan Feng

大學由資管系畢業後便投入職場,先後擔任程式設計師,系統設計師,系統分析師,專案管理師等職務。

曾服務於資訊服務業,筆電代工設計公司,和遊戲公司的專案管理師/程式設計師~目前在廣告行銷公關業擔任系統分析師。

持有國際 PMP 證照並持續努力累積社會大學的經驗中。

 


arrow
arrow

    Alan Feng 發表在 痞客邦 留言(3) 人氣()