Execução adiada e avaliação lenta em LINQ to XML
As operações de consulta e eixo são geralmente implementadas para usar a execução adiada. Este tópico explica os requisitos e as vantagens da execução adiada, além de algumas considerações sobre a implementação.
Execução Adiada
Execução adiada significa que a avaliação de uma expressão é atrasada até que seu valor realizado seja realmente necessário. A execução adiada pode aumentar muito o desempenho quando você precisa manipular grandes coleções de dados, especialmente em programas que contêm uma série de consultas ou manipulações encadeadas. Na melhor das hipóteses, a execução adiada permite apenas uma única iteração pela coleção de origem.
As tecnologias LINQ usam de modo intenso a execução adiada em ambos os membros das classes System.Linq centrais e nos métodos de extensão nos diversos namespaces LINQ, como Extensions.
A execução adiada tem suporte direto na linguagem C# pela palavra-chave yield (na forma da instrução yield-return) quando usada dentro de um bloco do iterador. Tal iterador deve retornar uma coleção do tipo IEnumerator ou IEnumerator (ou um tipo derivado). Não há nenhum equivalente à palavra-chave yield no Visual Basic 9.0, portanto é mais complicado implementar a execução adiada nessa linguagem.
Avaliação ansiosa vs.lenta
Quando você escreve um método que implementa a execução adiada, também precisa decidir se deve implementar o método usando a avaliação lenta ou a avaliação ansiosa.
Na avaliação lenta, um único elemento da coleção de origem é processado durante cada chamada ao iterador. Essa é a forma comum de implementação de iteradores.
Na avaliação ansiosa, a primeira chamada ao iterador resultará na coleção inteira que está sendo processada. Uma cópia temporária da coleção de origem também pode ser necessária. Por exemplo, o método OrderBy precisa classificar toda a coleção antes de retornar o primeiro elemento.
A avaliação lenta normalmente gera um melhor desempenho porque distribui a sobrecarga de processamento uniformemente por toda a avaliação da coleção e minimiza o uso de dados temporários. Naturalmente, para algumas operações, não há nenhuma outra opção que não seja materializar resultados intermediários.
Próximas Etapas
O próximo tópico deste tutorial ilustra a execução adiada:
Consulte também
Referência
Conceitos
Tutorial: Encadeamento consulta juntamente