Matérialisation (ToList, ToDictionary) et remarques sur les performances
Transformez des requêtes différées en collections concrètes avec ToList/ToArray/ToDictionary ; évitez les énumérations répétées et comprenez les règles d’unicité des clés.
Matérialisation (ToList, ToDictionary) et remarques sur les performances est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 3 leçons au total.
Pourquoi matérialiser
Les requêtes différées s’exécutent chaque fois que vous les énumérez.
- Matérialisez pour prendre un instantané
- Évitez de réexécuter plusieurs fois des requêtes coûteuses
- Choisissez List, Array ou Dictionary selon le besoin
ToList / ToArray
ToList/ToArray exécutent la requête une fois et stockent les résultats ; les modifications ultérieures de la source ne sont pas prises en compte.
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
}
}
Bases de ToDictionary
ToDictionary matérialise les résultats dans un Dictionary<K,V>. Les clés doivent être uniques, sinon une exception est levée.
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
}
}
Doublons : ToLookup/GroupBy
Lorsque les clés peuvent se répéter, préférez ToLookup (dictionnaire à valeurs multiples) ou GroupBy plutôt que 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);
}
}
}
Éviter les énumérations multiples
Chaque énumération peut réexécuter le traitement. Matérialisez une seule fois (par exemple avec ToList) lorsque vous parcourez les résultats plusieurs fois.
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
}
}
Liste de contrôle de la matérialisation
Liste de contrôle :
- Utilisez ToList/ToArray pour créer un instantané.
- Utilisez ToDictionary lorsque les clés sont uniques ; sinon, utilisez ToLookup/GroupBy.
- Évitez les énumérations multiples de sources coûteuses ; mettez-les en cache une seule fois.
- Matérialisez près des frontières (entrées-sorties, appels à la base de données) pour obtenir un comportement prévisible.
Exigence de ToDictionary
Récapitulatif
Récapitulatif : matérialisez avec ToList/ToArray pour créer des instantanés, utilisez ToDictionary pour une recherche rapide (clés uniques) et mettez les résultats en cache pour éviter de réexécuter des requêtes coûteuses.
Questions Fréquemment Posées
La leçon « Matérialisation (ToList, ToDictionary) et remarques sur les performances » est-elle gratuite ?
Oui — le texte complet de « Matérialisation (ToList, ToDictionary) et remarques sur les performances » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 3 leçons au total.
Qu'est-ce que j'apprendrai dans « Matérialisation (ToList, ToDictionary) et remarques sur les performances » ?
Transformez des requêtes différées en collections concrètes avec ToList/ToArray/ToDictionary ; évitez les énumérations répétées et comprenez les règles d’unicité des clés. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.
Combien de temps prend la leçon « Matérialisation (ToList, ToDictionary) et remarques sur les performances » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- GroupBy, Join, Aggregate et projections (types anonymes)
- Matérialisation (ToList, ToDictionary) et remarques sur les performances
- Conseils de composabilité