问题描述:
数据分页是做统计优化效率的最佳方式。但是XPO框架做的分页还是查询速度很慢,这是为什么?
问题原因:
-
做分页的逻辑原理——做分页必须有以下三个条件才可以做到分页:
- 总页数
- 当前页数
- 当前页数的数据
-
XPO查询数据大致原理:
XPO会根据所需要的查询条件,排序等会组合成SQL语句。当你用ToList()方法获取数据或者Count获取数据条数。XPO会把所有数据加载到内存里面给你展示你想要的数据。(包括Linq也会有此操作)
解决方案:
XPO有一个EvaluateDatastoreCount()可以获取到当前所查询数据的条数,并且不会把数据加载内存里面
相关完整代码展示:
var collection = new XPCollection<来访记录>(Program.objectSpace.Session);
var pager = new XPPageSelector();
pager.Collection = collection;
pager.PageSize = 20;
pager.CurrentPage = 0;
var result = ((IListSource)pager).GetList() as IList<来访记录>;
var count = collection.EvaluateDatastoreCount()