using System; using System.Collections.Generic; using System.Linq; using System.Text; public class ObjectPool_Queue where T : class, new() { private Queue m_objectQueue; private Action m_ResetAction; private Action m_InitAction; public ObjectPool_Queue(Action ResetAction = null, Action OnetimeInitAction = null) { m_objectQueue = new Queue(); m_ResetAction = ResetAction; m_InitAction = OnetimeInitAction; } public T New() { if (m_objectQueue.Count > 0) { T t = m_objectQueue.Dequeue(); if (null != m_ResetAction ) m_ResetAction(t); if (null != m_InitAction) m_InitAction(t); return t; } else { return null; } } public void Store(T obj) { m_objectQueue.Enqueue(obj); } } public class ObjectPool_Dict where Key : struct where Value : class, new() { private Dictionary> m_objectDic; private readonly Action m_ResetAction; private readonly Action m_InitAction; public ObjectPool_Dict(Action ResetAction = null, Action OnetimeInitAction = null) { //m_MaxTIme = initialBufferSize; m_objectDic = new Dictionary>(); m_ResetAction = ResetAction; m_InitAction = OnetimeInitAction; } public Value this[Key key] { get { if (!m_objectDic.ContainsKey(key)) return null; var objectPool_Queue = m_objectDic[key]; if (null == objectPool_Queue) objectPool_Queue = new ObjectPool_Queue(m_ResetAction, m_InitAction); var t = objectPool_Queue.New(); if (null == t) return t; return t; } set { if (!m_objectDic.ContainsKey(key)|| null == m_objectDic[key]) { m_objectDic[key] = new ObjectPool_Queue(m_ResetAction, m_InitAction); } m_objectDic[key].Store(value); } } }