.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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Fissare una versione dell'agent nelle pipeline di Azure DevOps
Controllare la velocità di spostamento su una pagina HTML
Integrare un servizio esterno con .NET Aspire
Pubblicare un MCP Server in GitHub MCP Registry
Utilizzare Intersect e Except per filtrare set di dati in TSql
Utilizzare @property per animare nativamente un oggetto HTML tramite CSS
Utilizzare Locust con Azure Load Testing
Integrare modelli AI in un workflow di GitHub
Le cron expression di un workflow di GitHub
Montare Azure Blob Storage su Linux con BlobFuse2
Effettuare un clone parziale di un repository di GitHub
Gestione file Javascript in Blazor con .NET 9
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Sfruttare una CDN con i bundle di ASP.NET
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Gli oggetti CallOut di Expression Blend 4.0


