/// <summary> /// 把大字节数组分割成指定容量等级的ByteListStream /// </summary> /// <param name="largeBuf"></param> /// <param name="level"></param> /// <returns></returns> public static BufferListStream Slice(byte[] largeBuf, BufferListPool.BufferLevel level) { BufferListStream bs = new BufferListStream(); int countleave = largeBuf.Length; int offset = 0; while (countleave > 0) { var buf = AllocBuf(level); int len = Math.Min(countleave, buf.Count); //Buffer.BlockCopy(largeBuf, offset, buf.Source.Array, buf.Source.Offset, len); buf.SetData(largeBuf, offset, len); bs.Add(buf); offset += len; countleave -= len; } return bs; }
public BufferListSegment(BufferListPool.BufferLevel level, ArraySegment<byte> source, BufferPool buffPool = null) { this.Level = level; this.m_OffsetOriginal = source.Offset; this.m_CountOriginal = source.Count; // this.Offset = source.Offset; this.Count = source.Count; // if (buffPool != null) { this.IsFromBufferListPool = true; this.m_BufferPool = buffPool; } else { this.m_Source = source; } }
//[Obsolete("就不应该有清理")] //internal static void ClearBuf() { // //lock (m_lockObj) { // BufPool.Clear(); // //} //} ///// <summary> ///// 默认缓存容量是80M,设置缓存容量倍数 设置为2则缓存容量是160M ///// </summary> ///// <param name="multiple">倍数必须大于0</param> //public static void SetCacheMultipleAll(byte multiple) { // BufPool.SetCacheMultipleAll(multiple); //} /// <summary> /// 设置指定缓存容量的 缓存倍数,如果编写程序中命中的缓存级别较大,可单独增加缓存数量 /// </summary> /// <param name="level"></param> /// <param name="multiple"></param> public static void SetCacheMultiple(BufferListPool.BufferLevel level, byte multiple) { BufPool.SetCacheMultiple(level, multiple); }
//static object m_lockObj = new object(); /// <summary> /// 线程安全 /// </summary> /// <param name="level"></param> /// <returns></returns> public static BufferListSegment AllocBuf(BufferListPool.BufferLevel level) { //lock (m_lockObj) { return BufPool.GetBuf(level); //} }