在前篇《淺談ListBox在Windows Phone 7 中的使用》 中大體介紹了ListBox在Windows Phone 7的用法,今天將繼續深究ListBox。主題是ListBox的性能問題。html
我相信,若是你們將本身的Windows Phone 部署到phone 7真機或多或少會遇到性能上的問題,固然這也是模擬器和真實設備區別之一,而這些問題很大程度上是ListBox的渲染以及從web上下載圖片形成的。這裏有一篇微軟WP7團隊提供的關於ListBox性能的文章,仍是值得你們一看的,裏面是微軟WP7團隊對如何優化windows phone 程序給出的建議。下圖是Colin Eberhardt對NoDo作的性能測試,能夠發現,ItemsControl能夠在更短的時間內提供相似ListBox的功能。web
咱們在真實機上測試的時候,可能會遇到的一個問題就是當我從一個頁面跳到另外一個頁面,而在這個頁面中有有一個比較複雜的UI(好比說ListBox中有100條數據,並且ListBox應用的模板相對複雜)。這時候咱們的程序感受像死掉了,界面一動不動。小七很無辜的說道,我還沒死,我只是在加載數據和渲染界面,等我弄好了我就活過來了,請耐心等我1分鐘。用戶可以等1分鐘麼? 這會給用戶帶來很很差的體驗。國外有研究說全景佈局控件(Panorama控件)加載會消耗大約1.6秒!windows
當應用程序啓動的時候,有啓動畫面會告知用戶程序正在啓動,而咱們在切換頁面的時候,也能夠加上相似的效果,告訴用戶,請稍等,我正在加載。國外大牛Colin Eberhardt 就提供了一種不錯的想法,叫延長加載(DeferredLoadContentControl),如下是兩種加載的用戶比對圖ide
具體的代碼能夠參考 DeferredLoadContentControl.zip 佈局
若是你的ListBox中的項目比較複雜,建議使用LazyListBox,一種在滑動時使用簡單模板,在中止滑動時再換爲正常(即複雜UI)的模板,具體的能夠參考 http://blogs.msdn.com/b/ptorr/archive/2010/10/12/procrastination-ftw-lazylistbox-should-improve-your-scrolling-performance-and-responsiveness.aspx post
在mango中,windows phone team已經對ListBox作了優化,若是你的ListBox中有圖片,它會啓用後臺線程去處理,若是你已經升到Mango,那麼你能夠看看ListBox有什麼改變,或者你也能夠再將LazyListBox替換爲ListBox.....性能
PS:這篇文章在草稿箱存了一月有餘,今天抽了點時間整理髮布... 測試