Könnte jemand diese Ergebnisse erklären? Ich weiß, dass es doppelte Fragen gibt, aber ich muss noch eine einzige Frage finden, die zu dem gleichen Ergebnis wie meine Ergebnisse kam: o
%Vor%
Sie führen niemals die Abfrage LINQ
aus, Sie erstellen sie einfach. Sie sollten die Methode ToList
oder ToArray
verwenden, um eine Iteration zu erzwingen. Wahrscheinlich erhalten Sie kein anderes Ergebnis, weil LINQ
auch eine foreach
-Schleife verwendet.
Bearbeiten : LINQ
benötigt ein wenig mehr Zeit, da Sie alle Elemente durchlaufen. Aber in Ihren beiden anderen Loops brechen Sie die Schleife, sobald Sie eine Übereinstimmung finden. Verwenden Sie FirstOrDefault
anstelle von Where
und Sie sollten dasselbe (oder ein ähnliches) Ergebnis erhalten.
Die linq nimmt keine Zeit, weil die Abfrage niemals tatsächlich ausgewertet wird .
Linq ist faul für die meisten Operationen, es wird nichts tun, bis jemand startet Aufzählung der Ergebnisse.
wenn Sie
hinzugefügt haben %Vor%Dann bin ich ziemlich sicher, dass Sie ein Ergebnis ungleich Null für linq haben.
Es ist offensichtlich von Bedeutung, dass Sum eine Box-Instanz des List-Enumerators auf dem Heap speichern muss und dieses Heap-Objekt zum Iterieren der Liste verwendet. Die Inline-Foreach- und die For-Schleife vermeiden dies; Ersteres, weil Lists öffentliche GetEnumerator-Methode einen Werttyp zurückgibt. Wenn Sie einen Verweis auf Personen in einer IEnumerable<Person>
-Variable speichern, dauert die foreach-Schleife etwas länger, um zu ihrem Ergebnis zu gelangen.
Außerdem muss linq Objekte für den Wo-Iterator und den Delegaten erstellen, die an es übergeben werden, und es führt mehr Null-Prüfungen durch, so dass es informative Ausnahmen auslösen kann, wenn eines der Argumente null ist. Das könnte für den Rest der zusätzlichen Zeit verantwortlich sein, die für den linq-Code benötigt wird.
Tags und Links c# linq performance foreach for-loop