浅谈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:这篇文章在草稿箱存了一月有余,今天抽了点时间整理发布...
如果您喜欢我的文章,您可以通过支付宝对我进行捐助,您的支持是我最大的动力https://me.alipay.com/alexis
作者:Alexis
出处:http://www.cnblogs.com/alexis/
关于作者:专注于Windows Phone 7、Silverlight、Web前端(jQuery)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过shuifengxuATgmail.com 联系我,非常感谢。