5

我有一個ASP.NET MVC 5網絡應用程序,並使用EF 6.1來訪問我的數據庫。
我有一些相當複雜的LINQ查詢需要10s來編譯,但隨後在幾毫秒內執行。 EF會緩存這些查詢,並在第二次執行查詢時在幾毫秒內返回。
但是這個緩存並沒有被保存,所以每個應用程序都重新啓動,需要重新編譯這個查詢,這又需要10秒鐘。堅持實體框架查詢緩存

有沒有辦法堅持這個查詢緩存,以便它在應用程序重新啓動?

+0

http://www.fusonic.net/zh/blog/2014/07/09/three-steps-for-fast-entityframework-6.1-first-query-performance/ – 2014-09-27 21:36:39

+0

感謝您的鏈接,但我已經做大部分這一點,它不處理查詢緩存,但只處理模型緩存...... – ChrFin 2014-09-28 07:56:13

+1

查詢緩存是QueryCacheManager中的一個Dictionary 。 我嘗試使用反射來保存它,但由於QueryCacheKey和QueryCacheEntry未公開,並且未標記爲可序列化,因此這是不可能的。 保存/加載查詢計劃緩存將是一個非常有用的功能,所以你應該在http://entityframework.codeplex.com/workitem/list/advanced上創建一個問題 – 2014-11-21 12:23:47

回答

0

,您可以使用編譯查詢:see herehere

但是如前所述here查詢對象不能超出範圍。您可以通過將其保存在會話中或作爲應用程序變量來處理此問題。

+1

對不起,但這沒有幫助,因爲在執行我的應用程序時,它們已經被EF緩存。我想要存儲這個*持久*所以它應用程序重新生存... – ChrFin 2014-11-17 12:07:06

+0

你可以在應用程序啓動時在後臺編譯它,所以它已經準備好,當你使用它。如果這是不可能的,你可以序列化編譯的查詢對象到文件並從那裏恢復。因此只有第一次使用是很慢的。但是這隻能通過編譯查詢來完成。 – Vanice 2014-11-17 13:07:50