Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary

di Stefano Mostarda, in .NET Framework,

.NET 8 introduce due nuovi tipi che ottimizzano le performance di accesso alle liste di oggetti: FrozenSet[T] e FrozenDictionary[T]. Il primo tipo contiene una lista di oggetti senza ammettere duplicati, mentre il secondo contiene un dictionary. Queste liste devono essere valorizzate in fase di istanziazione e poi non possono più essere modificate. Questo significa che durante la fase di inizializzazione i dati vengono immagazzinati in modo che le successive letture siano più performanti possibile (si stima che possano essere fino al 47% più veloci dei loro equivalenti non frozen). Queste caratteristiche rendendo questi tipi ottimi candidati per contenere dati che vengono caricati durante lo startup di un'applicazione e poi non cambiano più, ma vengono solamente letti. Un esempio di questo genere di dati possono essere tabelle di lookup dal database, dati di configurazione o altro ancora.

L'istanziazione di queste classi non può avvenire con un semplice new in quanto, una volta istanziata, l'istanza non può essere modificata. Per creare quindi questi oggetti dobbiamo rivolgerci a dei metodi di creazione che sono esposti dalla classi statiche FrozenSet e FrozenDictionary (versione non generica). Per creare un FrozenSet[T], dobbiamo usare il metodo ToFrozenSet di FrozenSet.

var set = FrozenSet.ToFrozenSet([1, 2, 3, 4, 5, 6, 7, 8]);

Questo utilizzo del metodo è comodo quando i dati sono statici, ma molto più facilmente capita che i dati siano in una lista e dobbiamo metterli in un FrozenSet[T]. Poichè ToFrozenSet è un extension method su IEnumerable[T], possiamo usarlo per trasformare qualsiasi lista in un FrozetSet[T].

var list = GetDataFromSource();
var frozenSet = list.ToFrozenSet();

Per creare un FrozenDictionary[T] il pattern è uidentico a quello appena visto per FrozenSet[T] con la sola differenza che si usa il metodo ToFrozenDictionary della classe ToFrozenDictionary.

//dati statici
FrozenDictionary.ToFrozenDictionary(new Dictionary<string, int> { { "a", 1 }, { "b", 2 }, { "c", 3 } });

//dati da sorgente
var dict = GetDataFromSource();
var frozenDict = dict.ToFrozenDictionary();

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi