2016-05-03 11 views
0

Leistung weise, welche von diesen beiden ist die schnellste?linq perfomance, wählen Sie bestimmte Spalten oder wählen Sie einfach alle

  1. einfach where-Klauseln verwenden oder keine Spalten usw. wählen

    var products = db.Products.OrderByDescending(p => p.ProductExpirationDate);            
    
  2. oder mehr explizit mit Spalten usw. gemäß dieser Abfrage

    var products = (from p in db.Products 
    select new GenericEcomDataAccess.ProductView 
    { 
        ProductID = p.ProductID, 
        ProductOwnerUserId = p.ProductOwnerUserId, 
        ProductCurrency = p.ProductCurrency, 
        ProductDescription = p.ProductDescription, 
        ProductPrice = p.ProductPrice, 
        ProductImage = p.ProductImage, 
        ProductName = p.ProductName 
    }).OrderByDescending(p => p.ProductExpirationDate).AsEnumerable().ToList();    
    
+0

Nicht sicher und daher nur ein Kommentar. Tatsache ist, dass es wichtig ist, wenn Sie eine T-SQL-Abfrage schreiben. LINQ ist nur ein Wrapper und generiert darunter eine SQL-Abfrage. Also denke ich, dass das auch in LINQ wichtig sein sollte. – niksofteng

+0

ersten wird '' IQueryable '' während die zweite ist '' List '', besser wäre 1. Ansatz, wie es die Ausführung von offered –

+0

ausführen Sie jede Anweisung und sehen Sie sich die generierten SQL-Anweisungen. Wenn Sie gegen eine große Tabelle laufen, bewerten Sie den Leistungs- und Ausführungsplan. Auch wenn Sie die Daten für # 1 materialisieren, haben wir keine Ahnung, wie komplex der Objektgraph ist. So ist es schwer zu bestimmen, welches besser ist – dfdsfdsfsdf

Antwort

0

Zu allererst Sie erzeugen unterschiedliche Ergebnisse (der zweite verwendet ToList(), der den Ergebnistyp ändert).

Leistungsmäßig haben Sie nicht genug Informationen gegeben. Es hängt tatsächlich von Ihrem Tisch ab. Wenn die zweite Abfrage jede Spalte für die Tabelle extrahiert, sind sie identisch. Wenn nicht, ist die zweite wahrscheinlich schneller (seit dem Sortieren des Teils der Tabelle dauert weniger Operation als das Sortieren der gesamten).

Aber ich würde vermuten, dass es eigentlich keine Rolle spielt seit asymptotisch sie sind die gleichen. Und wenn es nicht der performance-kritische Teil Ihres Programms ist, denke ich, dass Sie sich eigentlich nicht darum kümmern sollten.

(Und da diese Abfragen nur SQL-Anweisungen sind, ist es besser, dies mit SQL-Tags zu beantworten, nicht mit C#. Oder fügen Sie sie zumindest den Tags hinzu).

+0

Danke Jungs. Ich werde später einen Benchmark erstellen, wenn ich genug Daten habe, aber ich denke, dass ich mit den weniger gehen werde, desto besser. Isolieren Sie einen spezifischen Block, anstatt viele Spalten für nichts zu erhalten. Einfacher zu programmieren, aber wird es mehr Ressourcen und Zeit verbrauchen ?! Ich glaube es sollte. Danke nochmal. Mart –

Verwandte Themen