/** 扩展容量 */ 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; }
public static SocketAsyncEventArgsMetadata valueOf(int index) { SocketAsyncEventArgsMetadata result = new SocketAsyncEventArgsMetadata(); result.index = index; return(result); }
/**回收 SocketAsyncEventArgs */ public void Push(SocketAsyncEventArgsMetadata args) { int index = 0; lock (this) { index = args.GetIndex(); this.unUsedRecord.Add(index); this.usedRecord.Remove(index); } }
//是否动态扩展容量 // 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)); } }