博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListBox优化初步(二)
阅读量:6995 次
发布时间:2019-06-27

本文共 1580 字,大约阅读时间需要 5 分钟。

上文解决了虚拟化的问题,使得类Grid的多列布局ListBox也能实现虚拟化,可以说性能已经有了飞跃

 

但我的书中圣在使用过程中,仍然发现滑动起来卡卡的,上文的Demo大家可能注意到,即使是WrapPanel也仅是加载的时候很慢,滑动的时候也是流畅的,本文的内容就是关于ListBoxItem的结构复杂度问题。

 

注意观察上文的Demo,大家可以发现,ListBox的ItemTemplete非常简单,一个简单的色块加一行文字,这种情况下,排除加载速度,那么滑动性能是我们能接受的,但是,书中圣是这样的情况:

1)使用图片

2)相对复杂的布局

结果就使得列表滑动起来跳帧非常严重

这里有几种解决方案,Alexis有一篇文章很好的总结了几种提高ListBox性能体验的方式:

经过权衡,我决定采用LazyListBox,但是在使用过程中发现:

1)可能是因为图片的关系,导致简单模板和复杂模板在切换过程中非常生硬

2)只要出发滚动/滑动事件,那么就会重新渲染一次

所以最终令我哭笑不得的是,书中圣使用了该项技术后,体验反而不如原来的。这里要指出的是,如果你是纯文本的项,那么还是可以用LazyListBox的,我并不是否定他,而是说要因地制宜,根据自身的情况选用。

最终只能放弃使用,同时我注意到,当我不使用图片,或者将ListBox的ItemTemplete结构变得简单时,ListBox的性能大幅度提升,所以我决定精简模板结构。

这是原来的模板:

 

可以看到其实也不是很复杂,无非就是几个Grid嵌套,这里是改进后的模板:

 
 

变化在于:

1)取消Grid布局,改用Canvas,将嵌套结构尽量拉平,精简复杂度

2)取消对单个Item的手势和右键菜单监听,在ListBox外围放置统一的监听

经过这两个改造,列表在滑动时性能有少许上升,已经跳帧没有那么厉害了

 

一点小经验,欢迎大侠扔砖头

 

我的另一个产品博客,关于桌面小工具和Windows Phone 7应用作品的,欢迎访问:

转载地址:http://iaivl.baihongyu.com/

你可能感兴趣的文章
python 基础复习 05
查看>>
那些恶心人的Screen基本概念
查看>>
Windows Live Writer配置步骤
查看>>
[转]为什么不读顶级会议论文?
查看>>
策略模式(Strategy Pattern)
查看>>
Java程序基本概念
查看>>
Add Two Numbers
查看>>
查看Nginx、PHP、Apache和MySQL的编译参数
查看>>
Intellij 12 error: the root already belong to .....
查看>>
Windows 开发之VC++垃圾清理程序软件
查看>>
Iometer介绍与使用
查看>>
树的链式存储结构
查看>>
数据的存储
查看>>
服务器端 PHP执行js代码
查看>>
c++标准文件流文件尾符的处理原理
查看>>
centos install fcitx
查看>>
安装selenium ide历史版本
查看>>
PHP && ,and ,||,or 的区别
查看>>
jQuery中DOM操作
查看>>
通过socket实现文件发送,并解决粘包问题
查看>>