Frage

Alle,

Also ich habe alle meine SELECT-Abfragen in LINQ to SQL zu verwenden CompiledQueries umgewandelt Dinge zu beschleunigen. Funktioniert prima bisher für select-Anweisungen, aber ich habe nicht in der Lage gewesen, um herauszufinden, wie Einfügen, Aktualisieren vorab kompilieren oder Aussagen löschen.

Zugegeben, wenn Sie das Einfügen, Löschen oder in LINQ to SQL zu aktualisieren, müssen Sie das Objektmodell verwenden. Aber offensichtlich irgendwo auf dem Weg es eine Abfrage generiert, das wäre schön, vorab zusammenstellen und speichert in einem statischen Elemente.

Ist das möglich? Was LINQ Leistung wie für Updates, löscht und Einsätze, wenn seine nicht vorkompiliert? Ich konnte sehen, es ist viel schneller als die wählt ist, weil das, was sie tun, darunter viel einfacher ist und weniger „dynamisch“ ...

War es hilfreich?

Lösung

Es gibt einen großen Unterschied. Linq-To-SQL SELECT-Abfragen können große komplexe Ausdrücke Bäume sein. Seine diese, die irgendwann in Anspruch nehmen ‚Kompilieren‘. In diesem Fall Koaleszieren zu einem gewissen T-SQL, die ein SQL Server ausgeführt werden können. So macht es Sinn das Ergebnis einer Operation in den Cache, so dass sie wiederverwendet werden können.

Aber auch andere Löschen, Aktualisieren und Einfügen sind einfache Operationen, die auf T-SQL konvertiert nicht ein Ausdruck Baum benötigen werden (LINQ selbst dreht sich alles um die Abfrage). Es ist nur schade, dass wir haben trainiert von SQL-Code zu denken, dass diese Vorgänge als ‚Abfragen‘ führt, sind wir nicht für jede Info Actuall zu fragen.

Diese Operationen werden nur durch die Datacontext definiert nicht von LINQ daher der Code zur Ausführung dieser Funktionen ist bereits zusammengestellt.

Andere Tipps

Ich denke an die drei nur einfügen Sinn machen würde der Lage sein, zu kompilieren und wiederverwenden, weil Lösch trivial einfach ist (DELETE FROM Tabelle WHERE Key ...) und UPDATE nur die Felder aktualisiert, die sich geändert haben und so variiert je Update-Vorgang.

[) Amien

L2S verwendet „sp_executesql“ so, nachdem Sie es das erste Mal, führen Sie es in der gespeicherten Prozedur Ausführungsplan-Cache sein. Nachfolgende Durchläufe (von der gleichen Abfrage - nicht gleicher params) werden den kompilierte Plan aus dem Cache wiederverwenden. Also, was Sie fordern wird automatisch behandelt von SQL Server ‚hinter den Kulissen‘.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top