2016-02-09 20 views
5

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 
+2

này sẽ giúp http://stackoverflow.com/a/11688189/1236044 – jbl

+0

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

+2

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 –

Trả lời

5

Async phương pháp có thể có vấn đề hiệu suất khi đọc một cột lớn từ máy chủ (ví dụ như varbinary (MAX), varchar (MAX) , nvarchar (MAX) hoặc XML).

Bạn có thể tìm rducom câu trả lời mà giải thích vấn đề với phương pháp async here

+2

Bạn có thể bỏ phiếu để sửa lỗi này tại đây: https://entityframework.codeplex.com/workitem/2686 – Seb

Các vấn đề liên quan