关于EF查询的性能

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

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

 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倍之多……还没时间深究:一、第一种状况应该是EF延迟加载问题;二、第二种状况,若是不使用导航属性,一个成绩对应一名用户,1500条考试成绩,用户名查询查库就进行1500次,所以效率低,而使用导航属性在成绩查询时,已经包含了用户数据,所以不须要继续查库,不知道是否能够这样理解?有时间看看EF代码……spa

相关文章
相关标签/搜索