namespace TPSBR { using System.Collections.Generic; using System.Runtime.CompilerServices; public partial class DictionaryPool { // CONSTANTS private const int POOL_CAPACITY = 4; // PUBLIC MEMBERS public static readonly DictionaryPool Shared = new DictionaryPool(); // PRIVATE MEMBERS private List> _pool = new List>(POOL_CAPACITY); // PUBLIC METHODS [MethodImpl(MethodImplOptions.AggressiveInlining)] public Dictionary Get() { lock (_pool) { var poolCount = _pool.Count; if (poolCount == 0) { return new Dictionary(); } var lastIndex = poolCount - 1; var lastDictionary = _pool[lastIndex]; _pool.RemoveAt(lastIndex); return lastDictionary; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Return(Dictionary dictionary) { if (dictionary == null) return; dictionary.Clear(); lock (_pool) { _pool.Add(dictionary); } } } public static class DictionaryPool { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Dictionary Get() { return DictionaryPool.Shared.Get(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Return(Dictionary dictionary) { DictionaryPool.Shared.Return(dictionary); } } }