Performance com Yield Return

Sabe aquele Yield return que está no código fonte do Linq que voce 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 retorna um IEnumerable de números pares:

Sem Yield return

sem_yieldcom_yield

Com Yield return

Veja agora o impacto no consumo de memória!

YieldPeformanceRunning

 

Utilizando yield return são consumidos apenas 2,82Mb enquanto o retorno sem o yield return consumiram 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 sequencia.

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.

Confira o exemplo completo no GitHub: Yield return no Github

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s