Î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.
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.