IQueryable<T>调用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,到底干了啥?还有其他地方锁定了表?

求解,感谢任何建议。
...全文
272 点赞 收藏 9
写回复
9 条回复
小猪八Q 2013年12月17日
引用 7 楼 skytear 的回复:
[quote=引用 4 楼 caozhy 的回复:] 你的数据源是不是有问题。
数据源的问题?当时直接执行LINQ的那个Count方法参数的SQL,还是很快的。 所以,一定是EF在做查询的时候出了什么问题。 今天,这个方法有完全正常了。但是,当时出问题的,持续很长一段时间(几个小时),就一直超时,一定有什么事情。找不到原因。[/quote] EF有一个问题,就是第一次执行查询时,速度会很慢,不知道是不是这个问题
回复 点赞
轻舟已过万重山 2013年12月17日
引用 4 楼 caozhy 的回复:
你的数据源是不是有问题。
数据源的问题?当时直接执行LINQ的那个Count方法参数的SQL,还是很快的。 所以,一定是EF在做查询的时候出了什么问题。 今天,这个方法有完全正常了。但是,当时出问题的,持续很长一段时间(几个小时),就一直超时,一定有什么事情。找不到原因。
回复 点赞
轻舟已过万重山 2013年12月17日
引用 3 楼 q107770540 的回复:
用sql profile看一下,当执行.count方法时,数据库端发生了什么
是的,跟踪出来的SQL也很简单,执行也很快。
回复 点赞
轻舟已过万重山 2013年12月17日
引用 2 楼 wpfLove 的回复:
你试试在这个函数内直接调用执行sql语句会不会超时
不会,很快。就是执行一个Select count而已。
回复 点赞
轻舟已过万重山 2013年12月17日
引用 8 楼 wpfLove 的回复:
[quote=引用 7 楼 skytear 的回复:] [quote=引用 4 楼 caozhy 的回复:] 你的数据源是不是有问题。
数据源的问题?当时直接执行LINQ的那个Count方法参数的SQL,还是很快的。 所以,一定是EF在做查询的时候出了什么问题。 今天,这个方法有完全正常了。但是,当时出问题的,持续很长一段时间(几个小时),就一直超时,一定有什么事情。找不到原因。[/quote] EF有一个问题,就是第一次执行查询时,速度会很慢,不知道是不是这个问题[/quote] 应该不是,当时在开发环境直接连接生产的数据库,执行就超时。不是第一次,第二次的问题。
回复 点赞
你的数据源是不是有问题。
回复 点赞
兔子党-督察 2013年12月15日
用sql profile看一下,当执行.count方法时,数据库端发生了什么
回复 点赞
小猪八Q 2013年12月15日
你试试在这个函数内直接调用执行sql语句会不会超时
回复 点赞
发动态
发帖子
LINQ
创建于2007-12-13

7865

社区成员

4739

社区内容

.NET技术 LINQ
社区公告
暂无公告