当前位置: 首页 > news >正文

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

相关文章:

  • Stream groupings
  • 重构第4天:降低方法(Push Down Method)
  • [基础] 重载的时候什么时候用引用
  • 技术架构的关注点
  • 在线生成GIF文件
  • 给厕所换了一个排污管
  • CocoaPods简单配置。
  • Java8:使用Lambda表达式增强版Comparator排序
  • Java注解
  • Linux内核分析5
  • C#基础知识点
  • 不用bootstrap,只用CSS创建网格布局
  • 次小生成树模板
  • 最大非连续子序列
  • MongoDB 数据库安装
  • CSS3 变换
  • E-HPC支持多队列管理和自动伸缩
  • express如何解决request entity too large问题
  • Joomla 2.x, 3.x useful code cheatsheet
  • mac修复ab及siege安装
  • magento 货币换算
  • Mocha测试初探
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Vue 2.3、2.4 知识点小结
  • web标准化(下)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 理解在java “”i=i++;”所发生的事情
  • 前端相关框架总和
  • 通过git安装npm私有模块
  • 我与Jetbrains的这些年
  • MyCAT水平分库
  • 阿里云API、SDK和CLI应用实践方案
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 通过调用文摘列表API获取文摘
  • (0)Nginx 功能特性
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)关于pipe()的详细解析
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net mvc总结
  • .net 验证控件和javaScript的冲突问题
  • .NET6 命令行启动及发布单个Exe文件
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • :=
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [20160807][系统设计的三次迭代]
  • [APUE]进程关系(下)
  • [CISCN2019 华东南赛区]Web11
  • [CTO札记]盛大文学公司名称对联
  • [Hadoop in China 2011] Hadoop之上 中国移动“大云”系统解析