关于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代码……

你可能感兴趣的:(性能)