Performance com C# – Iterações e Instâncias

Fala galera, tudo certo?

Cá estamos mais uma vez falando sobre performance; dessa vez a dica é bem simples e rápida, porém bem útil e proveitosa para ocasiões em que vivemos em nosso dia-a-dia: a utilização de iterações e instância de classes.

Decidi falar sobre esse assunto, porque vi um código em produção fazendo exatamente isso, então certamente vocês podem se deparar com a mesma situação em vossos projetos.

Imagine um caso onde precisamos percorrer uma lista de e-mails e verificar se são válidos ou não. Naturalmente vamos precisar da classe Regex que fica na biblioteca System.Text.RegularExpressions; até aí tudo certo né?

Agora vejam como estava o código de validação antes da refatoração; lembrando que não era uma validação de e-mail, estou usando isso só para fins de exemplo:

Vejam que a classe Regex é instanciada para cada iteração da lista de e-mails, vejam quanto tempo leva para validarmos uma lista de 1 milhão de e-mails dessa maneira; para medir o tempo, utilizei a classe Stopwatch:

O resultado final é de aproximadamente 26 segundos para realizar a validação da lista toda:
validacaoemail01

Agora vejam, que com uma pequena mudança, vamos mudar um pouco esse tempo; reparem que na nova validação a classe Regex é instanciada apenas uma vez, antes do início das iterações na lista:

Só que agora, o resultado é de aproximadamente 4 segundos para a validação dos mesmos 1 milhão de e-mails:
validacaoemail02

É uma alteração deveras simples, que causa um belo de um impacto, lembrem-se que são os pequenos detalhes que vão dizer se estamos entregando um bom código ou um excelente código!

Os códigos utilizados estão disponíveis no GitHub: https://github.com/vmussak/instancia-loop-example

Por hoje é só isso, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão /  Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s