Determinar a capacidade inicial de List<T> pode aumentar a performance em até 62% comparado ao List<T> sem capacidade — Tiago Tartari
Não raro, aplicações que desenvolvemos a medida que crescem, passam a ficar mais lentas, com uso excessivo de memória e outros recursos computacionais.
Nesse sentido, compartilho uma dica sobre a utilização do List<T>. Também, como cuidar pra que essa estrutura de dados não passe a ser uma vilã, pressionando a memória e degradando a performance da sua aplicação.
O List<T> é uma das estruturas de dados que mais utilizamos em nossas aplicações. Tendo a pensar que pelo fato de não conhecermos a fundo outras estruturas de dados, sempre cairemos no List<T>.
Por debaixo do capô, as listas são Arrays que em .NET precisam pré-alocar um tamanho. Contudo, a pré-alocação, por nós, não ocorre com frequência, ou é quase inexistente.
Quando criamos uma lista e não especificamos um tamanho, ao adicionar o primeiro elemento, automaticamente criaremos mais outros 3 elementos vazios. Quando o limite é atingido, por exemplo, no quinto elemento, um novo objeto será criado, os valores serão copiados o novo item adicionado e a primeira lista descartada.
Nesse sentido, há um tempo considerável para as operações de inclusão do item, criação e cópia.
A imagem abaixo, ilustra esse processo.
Por fim, executando o exemplo acima no BenchmarkDotNet temos os seguintes resultados:
- O tempo de execução do List<T> com capacidade 62% mais rápido que o sem capacidade — Não temos incidência do custo para criar nova lista, fazer a cópia e descarte a lista antiga
- Temos redução na quantidade de memória alocada.
Em conclusão! Ao olhar para novas listas podemos, de forma simples, otimizar os recursos computacionais e não gerar processamento que não deveria existir.
Originally published at https://www.tiagotartari.net on March 1, 2021.