Ejemplo n.º 1
0
 /// <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);
         }
     }
 }
Ejemplo n.º 2
0
 /// <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);
         }
     }
 }
Ejemplo n.º 3
0
 /// <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();
             }
         }
     }
 }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 5
0
 /// <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);
     }
 }
Ejemplo n.º 6
0
 /// <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);
         }
     }
 }
Ejemplo n.º 7
0
 /// <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);
         }
     }
 }