zoukankan      html  css  js  c++  java
  • 关于EF查询的性能

    现象:前台grid发送ajax请求,通过谷歌devtool发现“waiting”时间高达23s(1500条数据);可见服务器端代码处理花费时间很长;

    解决:分析代码,有两处代码注释掉后速度提升明显

     1 //第一处,查询所有考试成绩:1500条
     2  var data = _scoreResultService.GetAllKenScoreResults().ToList();
     3 //去掉ToList()后查询时间减少明显(3s);
     4 
     5 //第二处;
     6  foreach (var item in data)
     7             {
     8                 KenScoreResultModel model = new KenScoreResultModel();
     9                 model = item.ToModel();
    10                 //var cus = _customerService.GetCustomerById(item.CustomerId);
    11                 //model.CustomerName = cus == null ? "未知用户名" : cus.GetFullName();
    12                 model.CustomerName = item.Customer.GetFullName();
    13 
    14 //修改后的代码 使用导航属性 修改后waiting时间大幅下降(降低到769ms)
    15                 var course = _courseService.GetKenCourseById(item.CourseId);
    16                
    17 
    18                 list.Add(model);
    19             }

    原因:前后查询时间差距有30倍之多……还没时间深究:1、第一种情况应该是EF延迟加载问题;2、第二种情况,如果不使用导航属性,一个成绩对应一名用户,1500条考试成绩,用户名查询查库就进行1500次,因此效率低,而使用导航属性在成绩查询时,已经包含了用户数据,因此不需要继续查库,不知道是否可以这样理解?有时间看看EF代码……

  • 相关阅读:
    How to Integrate JCaptcha in Spring Security
    精简的webservice
    linux时间与Windows时间不一致的解决
    java泛型
    spring全局变量引起的并发问题
    ByteBuffer常用方法详解
    cindy
    NIO之Buffer的clear()、rewind()、flip()方法的区别
    Java NIO(New I/O)的三个属性position、limit、capacity
    技术选型
  • 原文地址:https://www.cnblogs.com/Jnw-qianxi/p/4353309.html
Copyright © 2011-2022 走看看