0Pricing
C# Academy · Aula

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

Verificação rápida: o que tem de ser verdade ao utilizar ToDictionary(keySelector) numa sequência?

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

  1. GroupBy, Join, Aggregate, projeções (tipos anônimos)
  2. Materialização (ToList, ToDictionary) e observações de desempenho
  3. Dicas de composição
← Voltar para C# Academy