- 本篇针对 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 证照并持续努力累积社会大学的经验中。

 


相关文章