IQueryable调用Count的时候超时

轻舟已过万重山 2013-12-13 04:44:17
代码如下:

public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
{
int total = source.Count();
this.TotalCount = total;
this.TotalPages = total / pageSize;
if (total % pageSize > 0)
TotalPages++;
this.PageSize = pageSize;
this.PageIndex = pageIndex;
this.AddRange(source.Skip(pageIndex * pageSize).Take(pageSize).ToList());
}

问题:
执行到source.Count()的时候超时,但通过跟踪,执行这个方法的时候的T-SQL,COPY出来大概如下:
SELECT COUNT....
在SQL Server Management Studio中执行是非常快的。
不明白,Count()方法,除了去调用执行这句SQL,到底干了啥?还有其他地方锁定了表?

求解,感谢任何建议。
...全文
591 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小猪八Q 2013-12-17
  • 打赏
  • 举报
回复
引用 7 楼 skytear 的回复:
[quote=引用 4 楼 caozhy 的回复:] 你的数据源是不是有问题。
数据源的问题?当时直接执行LINQ的那个Count方法参数的SQL,还是很快的。 所以,一定是EF在做查询的时候出了什么问题。 今天,这个方法有完全正常了。但是,当时出问题的,持续很长一段时间(几个小时),就一直超时,一定有什么事情。找不到原因。[/quote] EF有一个问题,就是第一次执行查询时,速度会很慢,不知道是不是这个问题
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
你的数据源是不是有问题。
数据源的问题?当时直接执行LINQ的那个Count方法参数的SQL,还是很快的。 所以,一定是EF在做查询的时候出了什么问题。 今天,这个方法有完全正常了。但是,当时出问题的,持续很长一段时间(几个小时),就一直超时,一定有什么事情。找不到原因。
  • 打赏
  • 举报
回复
引用 3 楼 q107770540 的回复:
用sql profile看一下,当执行.count方法时,数据库端发生了什么
是的,跟踪出来的SQL也很简单,执行也很快。
  • 打赏
  • 举报
回复
引用 2 楼 wpfLove 的回复:
你试试在这个函数内直接调用执行sql语句会不会超时
不会,很快。就是执行一个Select count而已。
  • 打赏
  • 举报
回复
引用 8 楼 wpfLove 的回复:
[quote=引用 7 楼 skytear 的回复:] [quote=引用 4 楼 caozhy 的回复:] 你的数据源是不是有问题。
数据源的问题?当时直接执行LINQ的那个Count方法参数的SQL,还是很快的。 所以,一定是EF在做查询的时候出了什么问题。 今天,这个方法有完全正常了。但是,当时出问题的,持续很长一段时间(几个小时),就一直超时,一定有什么事情。找不到原因。[/quote] EF有一个问题,就是第一次执行查询时,速度会很慢,不知道是不是这个问题[/quote] 应该不是,当时在开发环境直接连接生产的数据库,执行就超时。不是第一次,第二次的问题。
threenewbee 2013-12-16
  • 打赏
  • 举报
回复
你的数据源是不是有问题。
q107770540 2013-12-15
  • 打赏
  • 举报
回复
用sql profile看一下,当执行.count方法时,数据库端发生了什么
小猪八Q 2013-12-15
  • 打赏
  • 举报
回复
你试试在这个函数内直接调用执行sql语句会不会超时

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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