Trong mã của tôi, tôi đã sử dụng để tải một thực thể liên quan bằng cách sử dụng await FindAsync
, hy vọng rằng tôi phù hợp hơn với nguyên tắc không đồng bộ của C#.FindAsync chậm, nhưng tải chậm là nhanh chóng
var activeTemplate = await exec.DbContext
.FormTemplates.FindAsync(exec.Form.ActiveTemplateId);
và chạy chậm, chậm trong cấu hình máy chủ sql, văn bản truy vấn nhanh trong SSMS. Phải mất 5 giây để lấy dòng này.
Giải pháp thay thế:
var activeTemplate = exec.Form.ActiveTemplate;
là nhanh hơn nhiều. Bởi tất cả các phương tiện, vấn đề dường như không phải là tham số sniffing, như số lần đọc trong các truy vấn nhanh và chậm là như nhau.
Một điểm có thể không liên quan là đối tượng đã tìm nạp chứa thuộc tính chuỗi chứa văn bản ~ 1MB. Ứng dụng này là asp.net mvc, chạy trên cùng một máy tính như máy chủ sql, kết nối bằng cách sử dụng (cục bộ).
Nguyên nhân của sự chậm trễ quan sát là gì?
EDIT: Sau khi bình luận @ jbl, tôi đã làm một số thí nghiệm hơn:
var activeTemplate = await exec.DbContext.FormTemplates
.FirstOrDefaultAsync(x => x.Id == exec.Form.ActiveTemplateId); // slow
var activeTemplate = exec.DbContext.FormTemplates
.FirstOrDefault(x => x.Id == exec.Form.ActiveTemplateId); // fast
này sẽ giúp http://stackoverflow.com/a/11688189/1236044 – jbl
Cảm ơn, kỳ lạ, Thies không phải là câu trả lời: xin vui lòng xem chỉnh sửa – Alireza
Xem câu trả lời ở đây, có thể là trường hợp của bạn: http://stackoverflow.com/questions/28543293/entity-framework-async-operation-takes-ten-times-as-long-to-complete –