Frage

Ich bin Refactoring eine vorhandene VB.NET Anwendung Linq zu verwenden. Ich habe in der Lage erfolgreich es zur Arbeit zu kommen, aber es dauert eine Ewigkeit (über eine Minute) auf dem Client-Rechner!

Sie haben viele Zeilen in der Datenbanktabelle, aber die alte Version des Programms auf derselben Maschine (die Datasets verwendet) dauert 5 Sekunden.

Meine Linq-Abfragen sind ziemlich Standard, etwa so:

Dim query = From t As TRANSACTION In db.TRANSACTIONs _
where t.transactionID = transactionID _
select t

Sie kehren immer nur eine oder keine Zeilen. Irgendwelche Gedanken?

War es hilfreich?

Lösung

Ich bin überrascht von der großen Zeitdifferenz (5 Sekunden bis 60+ Sekunden). Ich denke, es würde davon abhängen, wie komplex die TRANSACTION Einheit ist. LINQ to SQL wird jede Zeile aus der Ergebnismenge verarbeiten und es in ein Objekt drehen, dann den Datacontext eine state-Tracking-Informationen hinzuzufügen. Ein Datensatz einfach speichert die Daten roh und verarbeitet sie in stark typisierte Daten, wie Sie es aus dem Datatable lesen. Ich würde nicht L2S erwarten eine 12-fache Kostenerhöhung entstehen, aber ich würde einen gewissen Anstieg erwartet.

Andere Tipps

Der Code, den Sie eingefügt haben tatsächlich nicht auf die Datenbank zugreifen überhaupt - was Sie mit ‚query‘ als nächsten tun wird bestimmen, wie viele Daten endet an den Client übertragen zu werden. Ist es möglich, etwas, das man später tun verursacht die LINQ-Version mehr Daten als die Dataset-Version herunterladen?

Ich habe den gleichen Übergang an einem Projekt getan und nur gleichwertige oder bessere Leistung von LINQ, aber es gab Fälle gesehen, wo die LINQ-Version wurde viel mehr Roundtrips zum Server zu tun, zum Beispiel macht einen Count () und anschließend einen Abruf der Daten als zwei separate Server-Abfragen. Ich löste dies in der Regel durch einen .ToList tun () die Daten lokal zu erhalten, bevor daran zu arbeiten. Sie haben manchmal SQL Profiler verwenden, um herauszufinden, was hinter den Kulissen vor sich geht.

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