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。

 

吓死宝宝了……

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

posted @ 2016-03-15 23:16  小气鬼  阅读(443)  评论(0编辑  收藏  举报