LINQ查收数据库的性能瓶颈

最近需要对客户的系统进行升级,在对一张记录只有7767条记录的表进行分次查询时,每次查询500条,16次查询居然使用了2分钟时间。代码如下:

public static List<T> GetList(int pageIndex, int pageSize, out int count)
        {
            using (var db = new ClientDBDataContext(DBHelper.DBConString))
            {
                var query = db.DataBase_Table;

                count = query.Count();
                return query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            }
        }

调试结果显示,一次比一次查询的时间长,到第14次查询时,耗时20s之多,不忍直视,那还有记录达到百万条的又该如何???

 

baidu…… google……

其答案:

排除硬件原因,有以下可能:
1.你的OOXX写的不好,没利用到索引
2.表设计的不好,字段过多,导致返回数据过大
3.zp对象的构造函数/各属性有没有自定义加入了耗时的处理?
4.用ef的话,关闭proxy,关闭自动侦测实体状态

分析上述貌似都不对,当查看DataBase_Table的LINQ扩展时,发现了AsParallel(),查看说明:启用查询的并行化。

代码:

public static List<T> GetList(int pageIndex, int pageSize, out int count)
        {
            using (var db = new ClientDBDataContext(DBHelper.DBConString))
            {
                var query = db.DataBase_Table.AsParallel();

                count = query.Count();
                return query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            }
        }

 

运行,整个16次查询不到1s。

 

吓死宝宝了……

看来代码的优化在某些时候是非常重要的……

转载于:https://www.cnblogs.com/tangfd405/p/5281707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值