L’Array Pooling è una tecnica che permette di riutilizzare gli array invece di crearne di nuovi ogni volta che ne hai bisogno nell’ottica di ridurre la pressione sul Garbage Collector e migliorare così le prestazioni del tuo programma.
C# fornisce una classe ArrayPool<T> nel namespace System.Buffers, che gestisce un pool di array condiviso.
Esempio
Funzionamento interno
Internamente, la classe gestisce una serie di buckets che contengono gli array di diverse dimensioni.
Quando ==richiedi un array, la classe ArrayPool<T> cerca un array disponibile nel bucket corrispondente alla dimensione richiesta: Se ne trova uno, lo restituisce; altrimenti, ne crea uno nuovo==.
Quando restituisci un array al pool, viene inserito nel bucket corrispondente per essere riutilizzato in seguito.
Di seguito un esempio semplificato del funzionamento di un ArrayPool<T>
Tuttavia, la classe ArrayPool<T> fornita dal framework .NET è molto più ottimizzata e gestisce vari scenari come il trimming degli array inutilizzati, il thread-safety e il supporto per array di dimensioni variabili.