關於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

相關文章
相關標籤/搜索