浅谈ListBox在Windows Phone 7 中的使用(2)

在前篇《浅谈ListBox在Windows Phone 7 中的使用》  中大致介绍了ListBox在Windows Phone 7的用法,今天将继续深究ListBox。主题是ListBox的性能问题。

我相信,如果大家将自己的Windows Phone 部署到phone 7真机或多或少会遇到性能上的问题,当然这也是模拟器和真实设备区别之一,而这些问题很大程度上是ListBox的渲染以及从web上下载图片造成的。这里有一篇微软WP7团队提供的关于ListBox性能的文章,还是值得大家一看的,里面是微软WP7团队对如何优化windows phone 程序给出的建议。下图是Colin Eberhardt对NoDo做的性能测试,可以发现,ItemsControl可以在更短的时间内提供类似ListBox的功能。

 

我们在真实机上测试的时候,可能会遇到的一个问题就是当我从一个页面跳到另一个页面,而在这个页面中有有一个比较复杂的UI(比如说ListBox中有100条数据,而且ListBox应用的模板相对复杂)。这时候我们的程序感觉像死掉了,界面一动不动。小七很无辜的说道,我还没死,我只是在加载数据和渲染界面,等我弄好了我就活过来了,请耐心等我1分钟。用户能够等1分钟么? 这会给用户带来很不好的体验。国外有研究说全景布局控件(Panorama控件)加载会消耗大约1.6秒!

当应用程序启动的时候,有启动画面会告知用户程序正在启动,而我们在切换页面的时候,也可以加上类似的效果,告诉用户,请稍等,我正在加载。国外大牛Colin Eberhardt 就提供了一种不错的想法,叫延长加载(DeferredLoadContentControl),以下是两种加载的用户比对图

 

 

具体的代码可以参考 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 

在mango中,windows phone team已经对ListBox做了优化,如果你的ListBox中有图片,它会启用后台线程去处理,如果你已经升到Mango,那么你可以看看ListBox有什么改变,或者你也可以再将LazyListBox替换为ListBox.....

PS:这篇文章在草稿箱存了一月有余,今天抽了点时间整理发布... 

posted @ 2011-06-12 10:49  Alexis  阅读(3514)  评论(10编辑  收藏  举报