La complexité de LINQ OrderBy.First{OrDefault} a augmenté
L’implémentation de OrderBy.
First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) et OrderBy.
FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) a changé, ce qui a entraîné une complexité accrue pour l’opération.
Description de la modification
Dans .NET Core 1.x - 3.x, l’appel OrderBy ou OrderByDescending suivi de First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) ou FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) fonctionne avec la complexité O(N)
. Étant donné que seul le premier élément (ou celui par défaut) est requis, une seule énumération est requise pour le trouver. Toutefois, le prédicat fourni à First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) ou FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) est appelé exactement N
fois, où N
est la longueur de la séquence.
Dans .NET 5 et versions ultérieures, une modification a été apportée de telle sorte que l’appel à OrderBy ou OrderByDescending suivi de First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) ou FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) fonctionne avec la complexité O(N log N)
au lieu de O(N)
. Toutefois, le prédicat fourni à First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) ou FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) peut être appelé moins de N
fois, ce qui est plus important pour les performances globales.
Notes
Cette modification correspond à l’implémentation et à la complexité de l’opération dans .NET Framework.
Raison du changement
L’avantage d’appeler le prédicat moins souvent l’emporte sur une complexité globale inférieure, de sorte que l’implémentation introduite dans .NET Core 1.0 a été rétablie. Pour plus d’informations, consultez ce problème dotnet/runtime.
Version introduite
5,0
Action recommandée
Aucune action n’est requise de la part du développeur.
API affectées
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour