Determinar a capacidade inicial de List<T> pode aumentar a performance em até 62% comparado ao List<T> sem capacidade — Tiago Tartari

Tiago Tartari
2 min readMar 1, 2021

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.

--

--

Tiago Tartari

Microsoft MVP, programador por mais de 18 anos onde 10 deles atuando como arquiteto de soluções para e-commerce, palestrante técnico, apaixonado por performance