Performance com Yield Return

Thiago Borba
CWI Software
Published in
2 min readJul 18, 2018

Sabe aquele Yield return que está no código fonte do Linq que você achou interessante mas nunca utilizou? Pois bem, economiza memória, é mais performático e clean.

Os dois códigos abaixo fazem a mesma coisa, recebem um range gigante de números e retornam um IEnumerable de números pares:

Sem Yield return

Com Yield return

Veja agora o impacto no consumo de memória!

Utilizando yield return são consumidos apenas 2,82Mb enquanto o retorno sem o yield return consumiu incríveis 3,4Gb!

Observe que como o yield return é uma máquina de estado, o seu tempo de execução é maior (19s com yield e 16s sem yield).

O Yield return é um sintaxe sugar para controlar um fluxo de dados. Quando yield return é compilado, ele é transformado em uma máquina de estado, que permite controlar o fluxo de dados, retornando elementos sem sair do método. Ao invés de adicionarmos elementos em uma lista que é retornada posteriormente, retornamos elementos em sequência.

Na prática, apenas um elemento pode ser retornado, porém, nesse cenário, é um overhead, por isso o uso do yield return é recomendado para grande quantidade de elementos.

--

--