c# wpf listview虚拟化后还是卡顿

c# wpf listview虚拟化后还是卡顿,第1张

c# wpf listview虚拟化后还是卡顿解决方法如下:

1、使用Adapter提供的convertView,convertView是Adapter提供的视图缓存机制,当第一次显示数据的时候,adapter会创建n个(n等于页面可见的item的数目)convertView,当下次需要显示旦族新的item的时候,adapter会循环利用这些已经创建的convertView,减少再次创建convertView所带来的开销,从而达到性能的提升。

2、使用自定义的视图缓存

就是自定义一个视图缓存类,在这个类中保存我们在item中使用到的视图的引用,通过convertView的setTag方法和getTag方法来存储这个视图缓存类引用和重新获取这个视图缓存类引用,其目的也是为了减少重复创建视图时的开销。

3、减少不必要的视图更新

ListView在滚动时会请求重新获取咐迟则item,来显示不同内容的item,而如果在获取item时比较耗时就会造成在滚动时出现卡顿的现象。那我们可以通过监听ListView的滚动事件来使ListView处于不同的衡棚滚动状态时做不同的事情,比如在ListView处于滚动过程中加载少量的显示数据,当ListView处于空闲的状态时再加载所有的数据,这样就可以减少ListView在滚动过程中的开销,从而提高ListView的滚动速度。

就是要用DataGrid或ListView中的CellTemplate,行列必须那么多。然后说卡的原因(个人理解,未必是全部真相)以上两个控件都有一个特点,就是单个格子可以定制显示,换句话说,就是每个Cell要自行计算大小占空间位置等等,这样会很耗时。也就是卡的原因之一上面有位大哥已经提到过的,每个条目其实内部都进行了通知(Notify)导致更卡和虚拟化有关系,理论上虚拟化会快一些,但拖动滚动条时会更卡控件复杂度太高,性能自然下降,比如Border相对就比晌举Grid快,TextBlock就比Label快,DataGrid比ListView的GridView比ListBox快,等等如何解决呢?我提供两种方案1>. 简单解决,只解决卡的问题,不解决卡的原因一条条显示,每增加一条那界面线程休息100毫秒,这样其实显示时长更长了,但把时间分散了,不会卡界面2>. 根治,解决卡的原因,达到自己想的最好效果自写一个控件,只实现自己想神谨侍要的功能,把自己没用的功能全部拆掉,提高性能,也可以做成可拆除可装载的,不过这样会更麻烦点注:我自己也遇到了这种情况,基本上也是要求百行百列不卡,最终没办法只能选择了自己写控件,我自己写的叫DataTableView基本做到了百行百列无明显感知卡顿,另外我还需要钉左列和钉右列,DataGrid可以钉左列,但无法钉右列,所以其实游吵钉右列的需求才是真实让我下定决心做自己的控件,卡的问题一开始我用方法一解决的,还算可以接受。

查看更多

让电脑变卡的原因有很多敬乎:

1、电脑亮蚂悉内存不够,一直不清理电脑的缓存,就会让垃圾文件越来越多,这样就会导致电物瞎脑很卡,解决的办法很简单,用腾讯电脑管家火箭进行清理下。

2、网络太慢,如果宽带太小了,就会很慢很卡。升级宽带就好了。

3、电脑中病毒了。电脑一旦中毒了之后就会影响系统的运行速度,让电脑变很卡,所以不定时要用电脑管家对电脑进行杀毒。

4、软件不兼容,卸载掉不兼容的软件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12535165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存