Ich frage mich, was passiert unter der Haube von list.first () und Liste [0] und welche besser funktioniert.
Zum Beispiel was ist schneller?
%Vor%Entschuldigung Im Falle einer doppelten Frage
Was ist besser? Der Array-Accessor, da dieser keine Methode benötigt, um auf den Stack gesetzt zu werden und nicht die First
-Methode ausführen muss, um eventuell zum Array-Accessor zu gelangen.
Wie die Referenzquelle von Enumerable
zeigt, ist First()
eigentlich:
Es macht also nichts anderes, es braucht nur mehr Schritte, um dorthin zu gelangen.
Für Ihren zweiten Teil ( list.Where(x => x > 1).First()
vs. list.Where(x => x > 1).ToList()[0]
):
Where
gibt eine IEnumerable
zurück, was nicht IList
ist, also geht es nicht für den ersten Teil der First
-Methode, sondern den zweiten Teil:
Dadurch wird jedes Element einzeln durchlaufen, bis es den gewünschten Index erhält. In diesem Fall 0
, so wird es bald sehr . Der andere, der ToList
aufruft, wird immer weniger effizient sein, da er ein neues Objekt erstellen und alle Elemente dort hineinlegen muss, um das erste zu erhalten. Der erste Anruf ist definitiv schneller.
Einfache Verdichtung der Leistung Ссылка
%Vor%Erst gegen [0] Wenn du ein einfaches Array schneller hast, ist [0], weil es nur Addierer im Speicher berechnet. aber wenn Sie mit anderen LINQ-Befehl schneller kombinieren, ist First (). zum Beispiel Where (). First () sucht, bis er das erste Element findet. Where (). ToList () [0] findet alle Elemente, konvertiert sie in eine Liste und führt eine einfache Berechnung durch.
Eine andere Sache ist, dass Where () eine verzögerte Methode ist. Eine Abfrage, die nur verzögerte Methoden enthält, wird erst ausgeführt, wenn die Elemente im Ergebnis aufgelistet sind. also kannst du
%Vor%13 wird an das Ergebnis angehängt, aber 10 nein, weil 10 und 13 zuerst zur Liste hinzugefügt wurden, nachdem die Liste durchsucht wurde.
Wenn Sie mehr über Linq erfahren möchten, können Sie dieses Buch lesen Pro LINQ von Joseph Rattz und Adam Freeman Ссылка
>Es gibt keinen signifikanten Unterschied zwischen diesen, Sie werden ziemlich die gleichen Ergebnisse erhalten:
%Vor%Für Ihren zweiten Vergleich fragen Sie hier nur das erste Element
%Vor% Sobald also WhereIterator
einen Gegenstand zurückgibt, ist es erledigt. Aber in der Sekunde, die Sie alle Ergebnisse in Liste setzen und dann das erste Element mit Indexer erhalten, wird es daher langsamer sein.
list.Where(x => x > 1).First() vs. list.Where(x => x > 1).ToList()[0]
Die erste () sollte schneller sein, wenn sie auf Enumerable angewendet wird verzögerte Ausführung. In Ihrem Fall wird das Ergebnis so bald wie möglich zurückgegeben Es wurde ein Element Ihrer Liste gefunden, das den Kriterien entspricht Wo (x = & gt; x & gt; 1) .
Im zweiten Beispiel muss Ihre ursprüngliche Liste vollständig aufgelistet sein, Alle Elemente, die den Kriterien entsprechen, werden in eine temporäre Liste eingefügt, von der Sie das erste Element mit dem Array-Accessor erhalten.
str.Split(';').First() vs. str.Split(';')[0]
In diesem Fall gibt die Methode Split () bereits ein Array zurück. Der Array-Zugriffsmechanismus ist möglicherweise geringfügig schneller, aber die Leistungssteigerung ist in den meisten Fällen vernachlässigbar.
Tags und Links c#