//分配对象节点 public QueueNode <ByteData> Aloc(int nSize) { QueueNode <ByteData> node = null; int nBoundSize = GetBoundSize(nSize); if (nBoundSize > 0) { ThreadQueue <ByteData> queueData = null; if (m_dicMemPool.TryGetValue(nBoundSize, out queueData)) { node = queueData.Pop(); if (null != node) { return(node); } } } else { nBoundSize = nSize; } node = new QueueNode <ByteData>(); node.item = new ByteData(); node.next = null; node.item.data = new byte[nBoundSize]; node.item.nLen = 0; return(node); }
//更新(在生产者线程调用) public void Update() { //int nCount = 10; QueueNode <ByteData> node = null; do { node = m_oRecycleQueue.Pop(); if (node != null) { m_oMemPool.Recycle(ref node); } //--nCount; } while (node != null);//&& nCount>0); }
private QueueNode <Segment> AlocSegmentNode(int nSize) { QueueNode <Segment> node = m_oSegmentPool.Pop(); if (null == node) { node = new QueueNode <Segment>(); node.item = new Segment(); } else { node.item.Clear(); } //分配byte data node.item.data = m_oMemPool.Aloc(nSize); node.item.data.item.nLen = nSize; return(node); }
//弹出节点(在消费者中线程调用) public QueueNode <ByteData> Pop() { return(m_oDataQueue.Pop()); }