/// <summary> /// 请求新的内存空间 /// </summary> /// <param name="iLength"></param> public void Rebulid( int iLength ) { this.Release(); m_Stream = PacketWriter.Instance( iLength ); // 通过Release(...)返回进入空闲的集合 }
/// <summary> /// 表示数据已发送完成,释放请求过的加解压缩的内存 /// </summary> public void Release() { // 检测有没有调用过Free(...)函数 if ( Interlocked.Exchange( ref m_bIsRelease, 1 ) == 1 ) return; if ( m_Stream != null ) { m_Stream.Release(); // 返回进入空闲的集合 m_Stream = null; } }
/// <summary> /// /// </summary> /// <param name="iCapacity"></param> /// <returns></returns> internal static PacketWriter Instance( long iCapacity ) { PacketWriter packetWriter = null; s_LockPacketWriterPool.Enter(); { if ( s_PacketWriterPool.Count > 0 ) { packetWriter = s_PacketWriterPool.Pop(); if ( packetWriter != null ) { packetWriter.m_Capacity = iCapacity; packetWriter.m_Stream.SetLength( 0 ); Interlocked.Exchange( ref packetWriter.m_bIsInPool, 0 ); } } } s_LockPacketWriterPool.Exit(); if ( packetWriter == null ) packetWriter = new PacketWriter( iCapacity ); return packetWriter; }