entityframework 6.0 分页 的问题

laokaizzz 2014-06-03 05:59:57
很奇怪,采用了分页,160万数据,当我点击第一页,最后几页的时候,速度是2秒,可是当我点击3,4,5页时,很慢,10秒左右。
调用的都是一个方法。sqlprofile查看的查询语句也都一样。速度慢,是在 bbb 获取列表时慢,监控是,跟踪bbb(代码在下面) 的结果视图时,当是3,4,5等前面的页数时,会超时,但是1,最后几页时,1-2秒就可以获取到数据列表。很奇怪,不知道为啥,高手指导下,感谢。

和tolist的无关,实体类只有几个字段。

代码如下

        public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere,
Expression<Func<T, Tkey>> orderWhere, bool isDesc, out int totalcount) where T : class
{
using (SysDb<T> db = new SysDb<T>(strConn))
{
totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数
//需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法
IQueryable<T> aaa= CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize);

IQueryable<T> bbb = aaa.Take(pageSize);
return bbb.ToList();
}
}
public IQueryable<T> CommonSort<T, Tkey>(IQueryable<T> data, Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class
{
if (isDesc)
{
return data.OrderByDescending(orderWhere);
}
else
{
return data.OrderBy(orderWhere);
}
}
...全文
157 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
laokaizzz 2014-06-04
  • 打赏
  • 举报
回复
自己研究了下,我的排序字段是时间,那种原始的时间,而且很多一样。发现如果多加一个主键作为排序条件,就正常了。 我这么推测的,因为分页生成的sql语句用到的是top,[row_number],判断[Project1].[row_number] > 对应的数,是不是因为实际在数据库查找比对是从上往下找的,所以比较慢,如果页数是最后几页时,因为是倒序,所以刚好是在数据表的前几百行,所以快,而第2,3,4,5页。在数据表的最后面,所以比较慢,但是第一页为啥那么快呢,是因为刚后是最后几行,数据库有特殊的处理?但是这些sql语句直接在数据库中运行速度很快,这又是为啥,难道entity中间做了啥事? 先这么瞎猜吧。
laokaizzz 2014-06-03
  • 打赏
  • 举报
回复
求指教

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧