Mejoras de rendimiento de LINQ en .NET 9.0
(blog.ndepend.com)Mejoras de rendimiento de LINQ en .NET 9.0
-
Iteración con
Span<T>- En .NET 9.0, el rendimiento de LINQ ha mejorado considerablemente.
- Al iterar arreglos usando
Span<T>, el rendimiento mejora. - El método
TryGetSpan()convierte arreglos o listas enReadOnlySpan<T>para aumentar la velocidad de iteración.
-
Método
TryGetSpan()TryGetSpan()mejora el rendimiento de iteración al convertir arreglos o listas enReadOnlySpan<T>.- La optimización del código se realiza en detalles minuciosos, y es código escrito por expertos en rendimiento.
- Como el arreglo interno de una lista puede cambiar, hay que tener cuidado al usar
CollectionsMarshal.AsSpan().
-
Llamadores de
TryGetSpan()- Al analizar los métodos que llaman a
TryGetSpan(), se observa que muchos métodos deEnumerableintentan usar spans cuando se trata de arreglos o listas. - Las operaciones que usan
yieldno pueden aprovechar esta optimización.
- Al analizar los métodos que llaman a
-
Iteradores especializados
- Se mejoró el rendimiento al unificar las clases de iteradores basadas en las interfaces internas
IIListProvidereIPartitionde LINQ. - Se generan iteradores especializados que reconocen ciertas cadenas de llamadas de LINQ y las procesan de forma eficiente.
- Se mejoró el rendimiento al unificar las clases de iteradores basadas en las interfaces internas
-
Implementación de
Iterator<T>y clases derivadasIterator<T>es una clase abstracta, y las clases derivadas solo sobrescriben los métodos necesarios.ListWhereSelectIterator<TSource, TResult>mejora el rendimiento al procesar la cadenaWhere(...).Select(...)con un solo iterador.
-
Caso de estudio de
IListSkipTakeIterator<TSource>- El método
MoveNext()evita iteraciones innecesarias y solo procesa los elementos dentro del rango de_minIndexInclusivey_maxIndexInclusive.
- El método
Resumen de GN⁺
- En .NET 9.0, el rendimiento de LINQ ha mejorado notablemente, especialmente al usar
Span<T>yTryGetSpan()para acelerar la iteración. - La estructura interna de LINQ fue optimizada para reconocer ciertas cadenas de llamadas y generar iteradores especializados que las procesan eficientemente.
- Estas mejoras ayudan a aumentar el rendimiento del código, y migrar a una versión reciente de .NET permite aprovechar estos beneficios.
- Otra biblioteca que ofrece funcionalidades similares a LINQ es
System.Linq.Async.
1 comentarios
Opiniones en Hacker News
La parte más útil de LINQ es su extensión de
IEnumerable. Esto permite escribir C# con un estilo funcionalNo se entiende por qué el equipo de dotnet no invierte más recursos en las herramientas
Las mejoras de rendimiento de LINQ están centradas en mejorar el rendimiento de la implementación propia de
List<T>de MicrosoftLINQ es uno de los principales factores de diferenciación entre lenguajes
Cuanto más tome C# de F#, más satisfactorio resulta
Al usar otros lenguajes, se extraña LINQ
Una vez que se empieza a usar LINQ, se vuelve difícil usar otra cosa
Es difícil encontrar materiales integrales para aprender desarrollo web con dotnet
Las anotaciones en el código moderno de .NET son demasiado complejas
Hay una sección sobre mejoras de rendimiento en .NET 9
OrderBy(criteria).First()podría optimizarse aMin(criteria)