Die Komplexität von OrderBy.First{OrDefault} in LINQ wurde erhöht
Die Implementierung von OrderBy.
First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) und OrderBy.
FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) wurde geändert, wodurch die Komplexität des Vorgangs erhöht wurde.
Änderungsbeschreibung
In .NET Core 1.x bis 3.x werden Aufrufe von OrderBy oder OrderByDescending gefolgt von First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) oder FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) mit der Komplexität O(N)
durchgeführt. Da nur das erste Element (oder das Standardelement) erforderlich ist, ist nur eine Enumeration erforderlich, um es zu finden. Allerdings wird das für First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) oder FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) bereitgestellte Prädikat genau N
Mal aufgerufen. Dabei entspricht N
der Länge der Sequenz.
In .NET 5 und höheren Versionen wurde eine Änderung eingeführt, durch die Aufrufe von OrderBy oder OrderByDescending gefolgt von First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) oder FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) mit der Komplexität O(N log N)
anstelle von O(N)
durchgeführt werden. Allerdings kann das für First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) oder FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) bereitgestellte Prädikat weniger als N
Mal aufgerufen werden, was für die Gesamtleistung wichtiger ist.
Hinweis
Diese Änderung entspricht der Implementierung und Komplexität des Vorgangs im .NET Framework.
Grund für die Änderung
Der Vorteil weniger Aufrufe des Prädikats überwiegt geringere Gesamtkomplexität, daher wurde die in .NET Core 1.0 eingeführte Implementierung rückgängig gemacht. Weitere Informationen finden Sie in diesem Dotnet-/Runtime-Issue.
Eingeführt in Version
5.0
Empfohlene Maßnahme
Der Entwickler muss keine Maßnahmen ergreifen.
Betroffene APIs
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für