An Interest In:
Web News this Week
- April 29, 2024
- April 28, 2024
- April 27, 2024
- April 26, 2024
- April 25, 2024
- April 24, 2024
- April 23, 2024
A arte das colees em .NET - List
Com certeza voc j precisou lidar com dados e optou por usar List, seja por toda a praticidade que esta classe proporciona ou por ser uma das mais difundidas. Uma das perguntas que eu mais gosto de me fazer quando estou programando : por que vou usar isto aqui? Essa uma das perguntas que vamos responder agora no segundo artigo da srie sobre colees.
Definindo a List
Como vimos no artigo anterior, a recomendao usar colees genricas, ento encontramos a classe List<T>
no namespace System.Collections.Generic. A List<T>
representa uma lista fortemente tipada de objetos que podem ser acessados por ndice e possui mtodos para pesquisar, classificar e manipular as listas. Por baixo dos panos, a List<T>
um array unidimensional que comea em ndice zero.
Utilizando a List<T>
Para inicializar uma lista do tipo Aluno, escrevemos assim:
List<Aluno> alunos = new List<Aluno>();
Ao utilizarmos o construtor sem parmetros, iremos criar uma lista com a capacidade padro, que 4. Aps a inicializao, podemos adicionar itens lista usando o mtodo Add() passando o objeto aluno como parmetro, assim:
alunos.Add(new Aluno { Id = 1, Nome = "Thaise" });
Agora aqui a dica de ouro para otimizar seu cdigo usando List<T>
com uma grande quantidade de itens! Se no definirmos a capacidade, o .NET vai criar uma com capacidade para at 4 itens, que o padro. Toda vez que um item adicionado, verificado se a capacidade da lista comporta mais um item. Caso a capacidade seja menor que a quantidade de itens mais 1, que estamos tentando adicionar, ser criada uma nova lista com a capacidade duplicada e os itens da lista atual sero copiados para a nova.
Por exemplo: no nosso cdigo acima, criamos uma lista de alunos usando o construtor sem parmetros e adicionamos um aluno nela. Neste momento, temos uma lista de alunos com capacidade para at 4 itens e um item adicionado. Agora vamos inserir mais 3 itens:
alunos.Add(new Aluno { Id = 2, Nome = "Ana" });alunos.Add(new Aluno { Id = 3, Nome = "Cristiano" });alunos.Add(new Aluno { Id = 4, Nome = "Maggie" });
Neste momento ainda temos uma lista com capacidade para at 4 itens e agora com 4 itens. Isso significa que estamos utilizando a capacidade mxima. Quando adicionarmos mais um item, a verificao para saber se a lista comporta mais um item vai retornar negativa. Para comportar mais itens, ser criada uma nova lista com a capacidade duplicada da atual, que ser 8. Os itens da lista atual sero copiados para a nova e a sim ser adicionado o quinto item, fazendo com que ainda sobre 3 posies. Essa lgica repetida quantas vezes forem necessrias para comportar os itens que estamos adicionando e assim vamos criando listas com capacidade de 4, 8, 16, 32, 64, 128... E as listas antigas simplesmente so deixados para trs e ficam a cargo do Garbage Collector fazer a limpeza delas. Dependendo da quantidade, isso gera presso desnecessria no GC afetando a performance da sua aplicao. Entenderam a importncia de definirmos a capacidade? Para isso, basta usar o construtor com o parmetro int:
List<Aluno> alunos = new List<Aluno>(500);
Concluso
Usar a capacidade na inicializao da lista uma abordagem extremamente simples mas muito til ao lidar com grande quantidade dados. "Ah, mas e quando eu no sei quantos itens sero adicionados?" Aqui entra a importncia de entendermos a volumetria da aplicao que estamos trabalhando. A ideia no acertarmos a quantidade exata, mas termos uma noo para evitarmos presso desnecessria no Garbage Collector. Quer entender com mais detalhes como isso funciona no GC? Confira aqui
Referncias
Original Link: https://dev.to/unhacked/a-arte-das-colecoes-em-net-list-3b3f
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To