5

Tôi có một ứng dụng web ASP.NET MVC 5 và sử dụng EF 6.1 để truy cập vào DB của tôi.
Tôi có một số truy vấn LINQ khá phức tạp, mất đến 10 giây để biên dịch, nhưng sau đó thực thi sau vài mili giây. EF làm bộ nhớ cache truy vấn này tốt và lần thứ hai truy vấn được thực hiện nó trả về trong vòng vài mili giây này.
Tuy nhiên, bộ nhớ cache này không được duy trì nên mỗi khi khởi động lại ứng dụng, truy vấn cần phải được biên dịch lại, điều này sẽ mất 10 giây đó.Bộ nhớ cache truy vấn của Entity Entity Framework

Có cách nào để duy trì bộ nhớ cache truy vấn này để nó tồn tại khi khởi động lại ứng dụng không?

truy vấn
+0

http://www.fusonic.net/en/blog/2014/07/09/three-steps-for-fast-entityframework-6.1-first-query-performance/ –

+0

Cảm ơn bạn đã liên kết nhưng tôi đã làm hầu hết điều này và nó không xử lý bộ đệm truy vấn, nhưng chỉ có bộ nhớ đệm mô hình ... – ChrFin

+1

Bộ nhớ truy vấn là một từ điển bên trong QueryCacheManager. Tôi đã thử lưu nó bằng cách sử dụng sự phản chiếu, nhưng vì QueryCacheKey và QueryCacheEntry không được công khai và không được đánh dấu là Serializable nên không thể. Lưu/tải bộ đệm kế hoạch truy vấn sẽ là một tính năng rất hữu ích, vì vậy bạn nên tạo một vấn đề trên http://entityframework.codeplex.com/workitem/list/advanced –

Trả lời

0

Bạn có thể sử dụng biên soạn: see here hoặc here

Nhưng như đã đề cập here đối tượng truy vấn không phải đi ra khỏi phạm vi. Bạn có thể xử lý điều này bằng cách giữ nó được lưu trữ trong phiên hoặc dưới dạng biến ứng dụng.

+1

Xin lỗi, nhưng điều này KHÔNG có ích, như trong quá trình thực hiện ứng dụng của tôi, chúng đã được lưu trữ bởi EF. Tôi muốn lưu trữ này * liên tục * để nó tồn tại một ứng dụng khởi động lại ... – ChrFin

+0

Bạn có thể biên dịch nó trong khi khởi động ứng dụng ở chế độ nền để nó sẵn sàng khi bạn sử dụng nó. Nếu không thể, bạn có thể tuần tự hóa đối tượng truy vấn được biên dịch thành tệp và khôi phục nó từ đó. Do đó chỉ sử dụng lần đầu tiên là chậm. Tuy nhiên điều này chỉ có thể được thực hiện với các truy vấn được biên dịch. – Vanice