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

posted @ 2015-03-20 12:12  我佛慈悲纠结  阅读(280)  评论(0编辑  收藏  举报