예제 #1
0
        /// <summary>
        /// 请求新的内存空间
        /// </summary>
        /// <param name="iLength"></param>
        public void Rebulid( int iLength )
        {
            this.Release();

            m_Stream = PacketWriter.Instance( iLength );  // 通过Release(...)返回进入空闲的集合
        }
예제 #2
0
        /// <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;
            }
        }
예제 #3
0
        /// <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;
        }