Пример #1
0
 /// <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;
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
 //[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);
 }
Пример #4
0
 //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);
     //}
 }