Melhorias de desempenho do LINQ no .NET 9.0
(blog.ndepend.com)Melhorias de desempenho do LINQ no .NET 9.0
-
Iteração com
Span<T>- No .NET 9.0, o desempenho do LINQ foi significativamente melhorado.
- Ao iterar arrays usando
Span<T>, o desempenho melhora. - O método
TryGetSpan()converte arrays ou listas emReadOnlySpan<T>para aumentar a velocidade de iteração.
-
Método
TryGetSpan()TryGetSpan()melhora o desempenho da iteração ao converter arrays ou listas emReadOnlySpan<T>.- A otimização do código acontece em detalhes sutis, e o código foi escrito por especialistas em desempenho.
- Como o array interno da lista pode ser alterado, é preciso ter cuidado ao usar
CollectionsMarshal.AsSpan().
-
Chamadores de
TryGetSpan()- Ao analisar os métodos que chamam
TryGetSpan(), observa-se que muitos métodos deEnumerabletentam usar spans quando a origem é um array ou uma lista. - Operações que usam
yieldnão podem aproveitar essa otimização.
- Ao analisar os métodos que chamam
-
Iteradores especializados
- O desempenho foi melhorado ao unificar as classes internas de iteradores do LINQ baseadas em
IIListProvidereIPartition. - São gerados iteradores especializados que reconhecem determinadas cadeias de chamadas do LINQ e as processam de forma eficiente.
- O desempenho foi melhorado ao unificar as classes internas de iteradores do LINQ baseadas em
-
Implementação de
Iterator<T>e classes derivadasIterator<T>é uma classe abstrata, e as classes derivadas sobrescrevem apenas os métodos necessários.ListWhereSelectIterator<TSource, TResult>melhora o desempenho ao tratar a cadeiaWhere(...).Select(...)com um único iterador.
-
Estudo de caso de
IListSkipTakeIterator<TSource>- O método
MoveNext()evita iterações desnecessárias e processa apenas os elementos dentro do intervalo de_minIndexInclusivee_maxIndexInclusive.
- O método
Resumo do GN⁺
- No .NET 9.0, o desempenho do LINQ foi significativamente melhorado, especialmente com o uso de
Span<T>eTryGetSpan()para acelerar a iteração. - A estrutura interna do LINQ foi otimizada para reconhecer cadeias específicas de chamadas e gerar iteradores especializados que as processam com eficiência.
- Essas melhorias ajudam a aumentar o desempenho do código, e migrar para uma versão mais recente do .NET permite aproveitar esses benefícios.
- Outra biblioteca que oferece funcionalidades semelhantes ao LINQ é
System.Linq.Async.
1 comentários
Comentários do Hacker News
A parte mais útil do LINQ é a extensão de
IEnumerable. Isso permite escrever C# em um estilo funcionalNão dá para entender por que a equipe do dotnet não investe mais recursos nas ferramentas
As melhorias de desempenho do LINQ estão focadas nas melhorias de desempenho da própria implementação de
List<T>da MicrosoftO LINQ é um dos principais fatores de diferenciação entre linguagens
Quanto mais o C# toma emprestado do F#, melhor
Sente-se falta do LINQ ao usar outras linguagens
Depois que você começa a usar LINQ, fica difícil usar outra coisa
É difícil encontrar material abrangente para aprender desenvolvimento web com dotnet
As anotações no código moderno de .NET são complexas demais
Há uma seção sobre melhorias de desempenho no .NET 9
OrderBy(criteria).First()pode ser otimizado paraMin(criteria)