現象:前臺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