Materialização (ToList, ToDictionary) e observações de desempenho
Transforme consultas adiadas em coleções concretas com ToList/ToArray/ToDictionary; evite enumerações repetidas e conheça as regras de exclusividade das chaves.
Materialização (ToList, ToDictionary) e observações de desempenho é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 2 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.
Por que materializar
As consultas adiadas são executadas sempre que são enumeradas.
- Materialize para obter uma fotografia
- Evite executar novamente várias vezes consultas dispendiosas
- Escolha List, Array ou Dictionary conforme a necessidade
ToList / ToArray
ToList/ToArray executam a consulta uma vez e armazenam os resultados; alterações posteriores na origem não são refletidas.
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
List<int> data = new List<int>(new int[] { 1, 2, 3, 4 });
var evensQuery = data.Where(x => x % 2 == 0);
int[] evensArray = evensQuery.ToArray(); // snapshot now
List<int> evensList = evensQuery.ToList(); // snapshot now
data.Add(6); // changes after materialization
Console.WriteLine("Array:");
foreach (int x in evensArray) Console.WriteLine(x); // 2,4
Console.WriteLine("List:");
foreach (int x in evensList) Console.WriteLine(x); // 2,4
}
}
Noções básicas de ToDictionary
ToDictionary materializa numa Dictionary<K,V>. As chaves têm de ser únicas; caso contrário, ocorre uma exceção.
using System;
using System.Collections.Generic;
using System.Linq;
public sealed class City
{
public string Name;
public int Population;
public City(string name, int pop){ Name = name; Population = pop; }
}
public class Program
{
public static void Main(string[] args)
{
var cities = new City[]
{
new City("Oslo", 634000),
new City("Rome", 2873000),
new City("Riga", 605000)
};
Dictionary<string, int> byName = cities
.ToDictionary(c => c.Name, c => c.Population);
Console.WriteLine(byName["Rome"]); // 2873000
}
}
Duplicados: ToLookup/GroupBy
Quando as chaves podem repetir-se, prefira ToLookup (dicionário com vários valores) ou GroupBy em vez de ToDictionary.
using System;
using System.Collections.Generic;
using System.Linq;
public sealed class Item { public string Category; public string Name; public Item(string c, string n){ Category=c; Name=n; } }
public class Program
{
public static void Main(string[] args)
{
var items = new Item[]
{
new Item("Food","Apple"),
new Item("Food","Bread"),
new Item("Tool","Hammer"),
new Item("Tool","Wrench")
};
// If keys may repeat, use ToLookup (multi-value) or GroupBy
var lookup = items.ToLookup(i => i.Category, i => i.Name);
foreach (var g in lookup)
{
Console.WriteLine(g.Key + ":");
foreach (var name in g) Console.WriteLine(" - " + name);
}
}
}
Evitar várias enumerações
Cada enumeração pode executar novamente o trabalho. Materialize uma vez, por exemplo com ToList, quando for iterar várias vezes.
using System;
using System.Collections.Generic;
using System.Linq;
public static class Expensive
{
public static IEnumerable<int> Numbers()
{
// Simulate expensive enumeration (prints when enumerated)
for (int i = 1; i <= 3; i++)
{
Console.WriteLine("Produce " + i);
yield return i;
}
}
}
public class Program
{
public static void Main(string[] args)
{
var query = Expensive.Numbers().Select(x => x * x);
Console.WriteLine("First pass:");
foreach (int x in query) Console.WriteLine(x);
Console.WriteLine("Second pass (re-enumerates work):");
foreach (int x in query) Console.WriteLine(x);
Console.WriteLine("Cache with ToList:");
List<int> cached = query.ToList(); // runs once
foreach (int x in cached) Console.WriteLine(x); // no extra production logs
}
}
Lista de verificação da materialização
Lista de verificação:
- Utilize ToList/ToArray para obter uma fotografia.
- Utilize ToDictionary quando as chaves forem únicas; caso contrário, use ToLookup/GroupBy.
- Evite a enumeração múltipla de fontes dispendiosas; coloque os resultados em cache uma vez.
- Materialize perto das fronteiras (E/S, chamadas à base de dados) para obter um comportamento previsível.
Requisito do ToDictionary
Recapitulação
Recapitulação: materialize com ToList/ToArray para obter fotografias, utilize ToDictionary para pesquisas rápidas (chaves únicas) e coloque os resultados em cache para evitar executar novamente consultas dispendiosas.
Perguntas Frequentes
A aula “Materialização (ToList, ToDictionary) e observações de desempenho” é grátis?
Sim — o texto completo de “Materialização (ToList, ToDictionary) e observações de desempenho” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.
O que vou aprender em “Materialização (ToList, ToDictionary) e observações de desempenho”?
Transforme consultas adiadas em coleções concretas com ToList/ToArray/ToDictionary; evite enumerações repetidas e conheça as regras de exclusividade das chaves. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 3.
Quanto tempo leva a aula “Materialização (ToList, ToDictionary) e observações de desempenho”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- GroupBy, Join, Aggregate, projeções (tipos anônimos)
- Materialização (ToList, ToDictionary) e observações de desempenho
- Dicas de composição