/// <summary>
 /// 释放缓冲区
 /// </summary>
 /// <param name="buffer">缓冲区</param>
 public static unsafe void FreeOnly(ref subArray <byte> buffer)
 {
     if (buffer.UnsafeArray.length() == buffers.Size)
     {
         fixed(byte *bufferFixed = buffer.UnsafeArray)
         {
             if (Interlocked.Decrement(ref *(int *)bufferFixed) == 0)
             {
                 buffers.PushNotNull(buffer.UnsafeArray);
             }
         }
     }
 }
Exemple #2
0
 /// <summary>
 /// 获取压缩数据
 /// </summary>
 /// <param name="data">数据</param>
 /// <param name="memoryPool">数据缓冲区内存池</param>
 /// <param name="seek">起始位置</param>
 /// <returns>压缩数据,失败返回null</returns>
 internal static subArray <byte> GetCompress(ref subArray <byte> data, memoryPool memoryPool = null, int seek = 0)
 {
     if (data.length > GZipSize)
     {
         subArray <byte> compressData = stream.GZip.GetCompress(data.array, data.startIndex, data.length, seek, memoryPool);
         if (compressData.length != 0)
         {
             if (compressData.length + GZipSize < data.length)
             {
                 return(compressData);
             }
             if (memoryPool != null)
             {
                 memoryPool.PushNotNull(compressData.array);
             }
         }
     }
     return(default(subArray <byte>));
 }