Ist FirstOrDefault / First und OrderByDescending schneller als LastOrDefault / Last und OrderBy? [Duplikat]

9

Ich hatte eine LINQ Frage Ich fragte mich, ob jemand die Antwort wusste.

Normalerweise, wenn ich nach einem Datensatz suchen wollte, der von einem bestimmten Feld bestellt wurde, z. B. der "zuletzt hinzugefügten Person", würde ich etwas schreiben wie:

%Vor%

Kürzlich habe ich ein paar Arbeiten von einem anderen Entwickler des Teams aufgenommen, der es vorzieht zu schreiben:

%Vor%

Also meine Frage ist das, bestellt absteigend und wählt die erste, schneller oder langsamer als die andere Richtung bestellen und zuletzt auswählen?

Meine Gedanken sind, dass zuerst schneller wäre, da es nicht notwendig ist, über die Sammlung "so weit" zu iterieren, wenn ein Objekt zurückgegeben wird, aber das ist eher eine Ahnung als alles andere!

    
dougajmcdonald 15.02.2013, 09:24
quelle

1 Antwort

10

Wenn Sie LINQ-to-Objects verwenden, ist der erste marginal schneller. Die beiden Sortierungen benötigen jeweils die gleiche Zeit *, aber Sie haben recht, wenn Sie denken, dass FirstOrDefault schneller ist als LastOrDefault . Der Unterschied ist jedoch vernachlässigbar im Vergleich zu der Zeit, die die Sortierung benötigt.

(Beachten Sie, dass das Ausführen einer ganzen Sortierung, um nur das oberste Element zu verwenden, weitaus ineffizienter ist als die Verwendung von Last über First ; in Erwägung ziehen, etwas wie MoreLINQs MaxBy Funktion, um das gewünschte Element in O(n) zu erhalten, anstatt O(n log n) , time.)

Wenn Sie LINQ-to-etwas anderes (SQL, Entities) verwenden, wird es wahrscheinlich überhaupt keinen Unterschied machen.

* im Allgemeinen; wie RB darauf hinweist, ist dies möglicherweise nicht der Fall, wenn die Daten in gewissem Maße bereits geordnet sind.

    
Rawling 15.02.2013, 11:24
quelle

Tags und Links