Example #1
0
        /** 扩展容量   */
        private void extCapacity()
        {
            int minNewCapacity = 200;
            int newCapacity    = Math.Min(this.capacity, minNewCapacity);

            //每次以minNewCapacity倍数扩展
            if (newCapacity > minNewCapacity)
            {
                newCapacity += minNewCapacity;
            }
            else
            {
                //以自身双倍扩展空间
                newCapacity = 64;
                while (newCapacity < minNewCapacity)
                {
                    newCapacity <<= 1;
                }
            }


            for (int i = this.capacity; i < newCapacity; i++)
            {
                this.unUsedRecord.Add(i);
                this.pool.Add(SocketAsyncEventArgsMetadata.valueOf(i));
            }

            this.capacity = newCapacity;
        }
Example #2
0
        public static SocketAsyncEventArgsMetadata valueOf(int index)
        {
            SocketAsyncEventArgsMetadata result = new SocketAsyncEventArgsMetadata();

            result.index = index;
            return(result);
        }
Example #3
0
        /**回收 SocketAsyncEventArgs */
        public void Push(SocketAsyncEventArgsMetadata args)
        {
            int index = 0;

            lock (this)
            {
                index = args.GetIndex();
                this.unUsedRecord.Add(index);
                this.usedRecord.Remove(index);
            }
        }
Example #4
0
        //是否动态扩展容量
        // private bool dynamic = false;

        /**池子初始化*/
        private void init()
        {
            this.pool         = new List <SocketAsyncEventArgsMetadata>(this.capacity);
            this.usedRecord   = new List <Int32>(this.capacity);
            this.unUsedRecord = new List <Int32>(this.capacity);
            for (int i = 0; i < this.capacity; i++)
            {
                this.unUsedRecord.Add(i);
                this.pool.Add(SocketAsyncEventArgsMetadata.valueOf(i));
            }
        }