关于XAF中ListView慢的总结与改善

2023-05-20,,

关于XAFListView慢的总结与改善

一、数据访问模式改善:ListView中DataAccessMode中的改变:默认模式是Client,这在大多数情况下,适当的使用Server,ServerView,InstantFeedback和DataView,InstantFeedbackView模式是提升性能,其中ServerView和InstantFeedbackView是20.1.x版本提供;

1、Client显示模式,一次性的将数据库中的所有记录都读到客户端(win是客户端,web是读取web服务器内存中),不管界面上显示了多少数据,都先放到内存中去。执行排序、分组、分页、过滤,时,都是去操作内存数据。然而,在数据很多,关联很复杂时,一次性加载这么多会让我们感觉很慢(比如几万条),也非常占用内存。

2、Server显示模式,是使用sql语句进行分组、分页、排序、过滤的,这样会让数据不需要全部返回,数据多时,压力转移到sql服务器。只加载显示出来的部分,或一小部分数据,每次需要时,再去读取。数据量大时,比起client快很多,问题是1)当有自定义的VC中的过滤,排序,特别是针对非持久化字段的无法执行,在运行时的操作过滤与计算,不再有效,可以考虑用PersistentAlias来做服务端计算表达式,可以支持非持久带来的不支持;

3、DataView显示模式,一次性加载所有的数据,但不是转换为ORM对象,返回的是数组,缺点是用vc获取view上的对象是视图记录,不是真实的业务对象,需要ListView.GetObject这样;


4、InstantFeedback显示模式数据感知操作在后台线程异步执行,目前仅仅支持Win,在Web中并不支持;

5、ServerView显示模式是Server模式与DataView模式的综合,他们的缺点也是同样;

6、InstantFeedbackView模式是InstantFeedback与DataView模式的结合;
二、通过视图改善模式:
1、把需要改善的表直接连接无对象关联数据库视图,需要显示的字段通过视图关联显示,减少关联表的关联加载;
2、根据视图建立虚拟对象,持久化对象;
3、标记为报表对象[ReportAttribute("vw_P_materiel")];
4、标记新建对象为关联的对象[NewReportAttribute(typeof(P_materiel))]
5、实现IEditReportRecord, INewReportRecord编辑接口和新建接口,VC指向这个2个接口产生新建与修改对象;
6、实现GetEditReportObject返回编辑的对象;
7、使用Server数据访问模式;
8、观察产生的数据访问语句是否按照分页模式返回数据;
9、禁用这个对象本身的增删改VC,继承自ViewSearchBO即可;
10、参考例子:vw_P_materiel

关于XAF中ListView慢的总结与改善的相关教程结束。

《关于XAF中ListView慢的总结与改善.doc》

下载本文的Word格式文档,以方便收藏与打印。