5

Ich habe eine ASP.NET MVC 5 Web-Anwendung und verwenden EF 6.1, um auf meine DB zuzugreifen.
Ich habe einige ziemlich komplexe LINQ-Abfragen, die bis zu 10s dauern, um zu kompilieren, aber dann in wenigen Millisekunden auszuführen. EF speichert diese Abfragen in Ordnung, und wenn die Abfrage das zweite Mal ausgeführt wird, kehrt sie innerhalb dieser wenigen Millisekunden zurück.
Aber dieser Cache wird nicht beibehalten, also muss bei jedem App-Neustart die Abfrage neu kompiliert werden, was wiederum 10 Sekunden dauert.Persist Entity Framework Query Cache

Gibt es eine Möglichkeit, diesen Abfragecache persistent zu machen, damit er einen App-Neustart überlebt?

+0

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

+0

Danke für den Link, aber ich schon tun das meiste davon und es behandelt nicht den Abfrage-Cache, sondern nur Modell-Caching ... – ChrFin

+1

Der Abfrage-Cache ist ein Dictionary innerhalb von QueryCacheManager. Ich habe versucht, es mit Reflektion zu speichern, aber da QueryCacheKey und QueryCacheEntry nicht öffentlich und nicht als serialisierbar markiert ist, ist es nicht möglich. Speichern/laden Abfrage Plan Cache wäre eine sehr hilfreiche Funktion zu haben, so sollten Sie ein Problem erstellen auf http://entityframework.codeplex.com/workitem/list/advanced –

Antwort

0

können Sie kompilierten Abfragen verwenden: see here oder here

Aber als here das Abfrageobjekt erwähnt darf nicht außerhalb des Gültigkeitsbereichs gehen. Sie können damit umgehen, indem Sie es entweder in der Sitzung zwischengespeichert halten oder als Anwendungsvariable.

+1

Sorry, aber das hilft NICHT, da sie während der Ausführung meiner App bereits von EF zwischengespeichert werden. Ich möchte dies * persistent * speichern, damit es einen App-Neustart überlebt ... – ChrFin

+0

Sie können es während App-Start im Hintergrund kompilieren, so dass es bereit ist, wenn Sie es verwenden. Wenn das nicht möglich ist, können Sie das kompilierte Abfrageobjekt in eine Datei serialisieren und von dort wiederherstellen. Daher ist nur der allererste Gebrauch langsam. Dies kann jedoch nur mit kompilierten Abfragen durchgeführt werden. – Vanice

Verwandte Themen