Пример #1
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="poolSize">池子最大容量</param>
        /// <param name="fill">初始化时是否填满池子</param>
        /// <param name="template">克隆模板(模板不为空时将自动调用CloneTools.DeepCopy进行拷贝)</param>
        public ObjectPool(int poolSize, bool fill = false, T template = null)
        {
            _Template = template;
            _Pool     = new RingQueue <T>(poolSize);
            if (fill)
            {
                if (template == null)
                {
                    for (int i = 0; i < poolSize; i++)
                    {
                        _Pool.Enqueue(new T());
                    }
                }
                else
                {
                    for (int i = 0; i < poolSize; i++)
                    {
                        _Pool.Enqueue(CloneTools.DeepCopy(template));
                    }
                }
            }

            _UsedPool = new List <T>(_Pool.RingSize);
        }
Пример #2
0
 public void Dispose()
 {
     _position = -1;
     _data     = null;
 }
Пример #3
0
 public RingQueueEnumerator(RingQueue <T> data)
 {
     _data     = data;
     _position = data._rear - 1;
     _count    = data._Count;
 }
Пример #4
0
 /// <summary>
 /// 构造函数
 /// 从已初始化好的集合创建对象池
 /// </summary>
 /// <param name="collection">指定集合</param>
 public ObjectPool(IEnumerable <T> collection)
 {
     _Pool     = new RingQueue <T>(collection);
     _Template = null;
     _UsedPool = new List <T>(_Pool.RingSize);
 }
Пример #5
0
        static void TestRingQueue()
        {
            Console.Title = "环队列测试";
            RingQueue <int> queue = new RingQueue <int>(10);

            queue.Enqueue(666);
            queue.Enqueue(777);
            var n  = queue.Peek();
            var n1 = queue.Dequeue();

            Console.WriteLine(n);
            Console.WriteLine(n1);
            for (int i = 0; i < 15; i++)
            {
                queue.Enqueue(i);
            }

            foreach (var temp in queue)
            {
                Console.WriteLine(temp);
            }

            Console.WriteLine("=======================");

            while (!queue.IsEmpty)
            {
                Console.WriteLine(queue.Dequeue());
            }
            Console.WriteLine("=======================");
            Console.WriteLine("10000000次入队出队:");

            RingQueue <int> queue1 = new RingQueue <int>(10001);
            Queue <int>     queue2 = new Queue <int>();

            int       max       = 10000000;
            Random    random    = new Random();
            Stopwatch stopwatch = Stopwatch.StartNew();

            for (int i = 0; i < max; i++)
            {
                queue2.Enqueue(random.Next());
            }

            while (queue2.Count > 0)
            {
                queue2.Dequeue();
            }
            stopwatch.Stop();
            Console.WriteLine("原队列:{0}", stopwatch.Elapsed);

            stopwatch.Restart();
            for (int i = 0; i < max; i++)
            {
                queue1.Enqueue(random.Next());
            }

            while (!queue1.IsEmpty)
            {
                queue1.Dequeue();
            }
            stopwatch.Stop();
            Console.WriteLine("环队列:{0}", stopwatch.Elapsed);
        }