/// <summary> /// 清除 /// </summary> /// <param name="arg"></param> public void Clear(IEventArgs arg = null) { using (LockWait wait = new LockWait(ref lockParam)) { while (pool.Count > 0) { var t = pool.Dequeue(); OnClear(t, arg); } } }
/// <summary> /// 清除 /// </summary> /// <param name="count"></param> /// <param name="arg"></param> public void Clear(int count, IEventArgs arg = null) { using (LockWait wait = new LockWait(ref lockParam)) { count = count > pool.Count ? 0 : pool.Count - count; while (pool.Count > count) { var t = pool.Dequeue(); OnClear(t, arg); } } }
/// <summary> /// 清除 /// </summary> /// <param name="arg"></param> public void Clear(IEventArgs arg = null) { using (LockWait wait = new LockWait(ref lockParam)) { while (pool.Count > 0) { var t = pool.Dequeue(); OnClear(t, arg); IDisposable dispose = t as IDisposable; if (dispose != null) { dispose.Dispose(); } } } }
/// <summary> /// 获取 /// </summary> /// <param name="arg"></param> /// <returns></returns> public override T[] Get(IEventArgs arg = null) { ArrayPoolArg len = arg as ArrayPoolArg; if (len == null) { return(null); } int length = len.length; using (LockWait wait = new LockWait(ref lockParam)) { T[] t; if (pool.Count > 0 && _lengthqueue.Contains(length)) { Queue <T[]> queue = Framework.GlobalAllocate <Queue <T[]> >(); while (_lengthqueue.Peek() != length) { _lengthqueue.Dequeue(); queue.Enqueue(pool.Dequeue()); } t = pool.Dequeue(); while (pool.Count != 0) { queue.Enqueue(pool.Dequeue()); } int _count = queue.Count; for (int i = 0; i < _count; i++) { var tmp = queue.Dequeue(); int _len = tmp.Length; _lengthqueue.Enqueue(_len); pool.Enqueue(tmp); } Framework.GlobalRecyle(queue); } else { t = CreatNew(arg); OnCreate(t, arg); } OnGet(t, arg); return(t); } }
/// <summary> /// 获取 /// </summary> /// <param name="arg"></param> /// <returns></returns> public virtual T Get(IEventArgs arg = null) { using (LockWait wait = new LockWait(ref lockParam)) { T t; if (pool.Count > 0) { t = pool.Dequeue(); } else { t = CreatNew(arg); OnCreate(t, arg); } OnGet(t, arg); return(t); } }
/// <summary> /// 回收 /// </summary> /// <param name="t"></param> /// <param name="arg"></param> /// <returns></returns> public virtual bool Set(T t, IEventArgs arg = null) { using (LockWait wait = new LockWait(ref lockParam)) { if (!pool.Contains(t)) { if (OnSet(t, arg)) { pool.Enqueue(t); } return(true); } else { Log.E("Set Err: Exist " + type); return(false); } } }
/// <summary> /// 回收 /// </summary> /// <param name="t"></param> /// <param name="arg"></param> /// <returns></returns> public override bool Set(T[] t, IEventArgs arg = null) { using (LockWait wait = new LockWait(ref lockParam)) { if (!pool.Contains(t)) { if (OnSet(t, arg)) { int _len = t.Length; _lengthqueue.Enqueue(_len); pool.Enqueue(t); } return(true); } else { Log.E("Set Err: Exist " + type); return(false); } } }