Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La implementación de OrderBy.First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) y OrderBy.FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) ha cambiado, lo que da lugar a una mayor complejidad para la operación.
Descripción del cambio
Entre las versiones 1.x y 3.x de .NET Core, llamar a OrderBy o OrderByDescending seguido de First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) o FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) funciona con complejidad O(N). Puesto que solo se requiere el primer elemento (o predeterminado), solo se requiere una enumeración para encontrarlo. Sin embargo, el predicado que se proporciona a First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) o FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) se invoca exactamente N veces, donde N es la longitud de la secuencia.
En .NET 5 y versiones posteriores, se realizó un cambio para que llamar a OrderBy o OrderByDescending seguido de First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) o FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) funcione con una complejidad de O(N log N) en lugar de una complejidad de O(N). Sin embargo, el predicado que se proporciona a First<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) o FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) se puede invocar menos de N veces, lo que es más importante para el rendimiento general.
Nota:
Este cambio coincide con la implementación y la complejidad de la operación en .NET Framework.
Motivo del cambio
La ventaja de invocar el predicado menos veces supera una complejidad general menor, por lo que se revierte la implementación que se introdujo en .NET Core 1.0. Para más información, vea este problema en dotnet/runtime.
Versión introducida
5.0
Acción recomendada
No se requiere ninguna acción en la parte del desarrollador.