Colecții Înghețate pentru Citire de Mare Viteză în .NET: FrozenDictionary și FrozenSet în C# (.NET)

Ghid complet pentru colecțiile înghețate din namespace-ul System.Collections.Frozen (.NET 8): optimizarea extremă a tabelelor hash pentru date imutabile citite frecvent și comparație de performanță cu Dictionary.

Sintaxă C#
FrozenDictionary<string, User> cache = dict.ToFrozenDictionary(); | FrozenSet<T>

Într-o aplicație tipică de producție, multe dicționare și mulțimi de date sunt populate o singură dată la pornirea aplicației (tabele de configurări, liste de rute HTTP, coduri de monede ISO, dicționare de permisiuni) și apoi sunt interogate de milioane de ori fără a mai fi vreodată modificate.

Clasicul Dictionary<TKey, TValue> suportă un overhead intern continuu pentru a permite inserții și redimensionări dinamice. Noul namespace System.Collections.Frozen (introdus în .NET 8) analizează cheile în momentul apelării metodei ToFrozenDictionary() și construiește o structură de căutare perfect optimizată pentru hardware, oferind căutări substanțial mai rapide cu zero alocări.

Crearea și Consumul unui FrozenDictionary
using System.Collections.Frozen;

public class ConfigurareSistem
{
    // Dicționar înghețat imutabil optimizat pentru citire continuă:
    private readonly FrozenDictionary<string, string> _setari;

    public ConfigurareSistem(Dictionary<string, string> dateInitiale)
    {
        // ToFrozenDictionary analizează cheile și alege algoritmul optim de hashing:
        _setari = dateInitiale.ToFrozenDictionary();
    }

    public string ObtineValoare(string cheie)
    {
        // Căutarea în FrozenDictionary este cu 20% - 50% mai rapidă decât în Dictionary!
        if (_setari.TryGetValue(cheie, out string? valoare))
        {
            return valoare;
        }
        return "Implicit";
    }
}

De Ce FrozenDictionary Este Atât de Rapid?

  • Funcție Hash Personalizată la Creare: Dacă cheile sunt șiruri scurte, compilatorul generează o funcție hash perfectă fără coliziuni, verificând caracterele direct prin instrucțiuni SIMD.
  • Imutabilitate Absolută: Memoria este compactată contiguu, asigurând că datele încap perfect în liniile de cache L1/L2 ale procesorului.