using System; using System.Collections.Generic; namespace ET { public class MonoPool: IDisposable { private readonly Dictionary> pool = new Dictionary>(); public static MonoPool Instance = new MonoPool(); private MonoPool() { } public object Fetch(Type type) { Queue queue = null; if (!pool.TryGetValue(type, out queue)) { return Activator.CreateInstance(type); } if (queue.Count == 0) { return Activator.CreateInstance(type); } return queue.Dequeue(); } public void Recycle(object obj) { Type type = obj.GetType(); Queue queue = null; if (!pool.TryGetValue(type, out queue)) { queue = new Queue(); pool.Add(type, queue); } queue.Enqueue(obj); } public void Dispose() { this.pool.Clear(); } } }