当前位置: 首页 > 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 数据库安装
  • 「面试题」如何实现一个圣杯布局?
  • Akka系列(七):Actor持久化之Akka persistence
  • Babel配置的不完全指南
  • Docker: 容器互访的三种方式
  • express.js的介绍及使用
  • HTML5新特性总结
  • JavaScript HTML DOM
  • JavaScript创建对象的四种方式
  • Java深入 - 深入理解Java集合
  • Laravel Telescope:优雅的应用调试工具
  • MaxCompute访问TableStore(OTS) 数据
  • miaov-React 最佳入门
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Swoft 源码剖析 - 代码自动更新机制
  • 浅谈web中前端模板引擎的使用
  • 手写双向链表LinkedList的几个常用功能
  • 说说动画卡顿的解决方案
  • 一道闭包题引发的思考
  • 一个SAP顾问在美国的这些年
  • 1.Ext JS 建立web开发工程
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (windows2012共享文件夹和防火墙设置
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (过滤器)Filter和(监听器)listener
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 中让 Task 支持带超时的异步等待
  • .Net多线程总结
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net连接MySQL的方法
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .sys文件乱码_python vscode输出乱码
  • /3GB和/USERVA开关
  • []串口通信 零星笔记
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [51nod1610]路径计数