コード例 #1
0
 public override byte[] TakeBuffer(int bufferSize)
 {
     InternalBufferManager.PooledBufferManager.BufferPool pool = this.FindPool(bufferSize);
     byte[] numArray1;
     if (pool != null)
     {
         byte[] numArray2 = pool.Take();
         if (numArray2 != null)
         {
             pool.DecrementCount();
             numArray1 = numArray2;
         }
         else
         {
             if (pool.Peak == pool.Limit)
             {
                 ++pool.Misses;
                 if (++this.totalMisses >= 8)
                 {
                     this.TuneQuotas();
                 }
             }
             numArray1 = Fx.AllocateByteArray(pool.BufferSize);
         }
     }
     else
     {
         numArray1 = Fx.AllocateByteArray(bufferSize);
     }
     return(numArray1);
 }
コード例 #2
0
            private void ChangeQuota(ref InternalBufferManager.PooledBufferManager.BufferPool bufferPool, int delta)
            {
                InternalBufferManager.PooledBufferManager.BufferPool bufferPool1 = bufferPool;
                int limit = bufferPool1.Limit + delta;

                InternalBufferManager.PooledBufferManager.BufferPool pool = InternalBufferManager.PooledBufferManager.BufferPool.CreatePool(bufferPool1.BufferSize, limit);
                for (int index = 0; index < limit; ++index)
                {
                    byte[] buffer = bufferPool1.Take();
                    if (buffer != null)
                    {
                        pool.Return(buffer);
                        pool.IncrementCount();
                    }
                    else
                    {
                        break;
                    }
                }
                this.remainingMemory -= (long)(bufferPool1.BufferSize * delta);
                bufferPool            = pool;
            }