예제 #1
0
        public SmartBufferPool(int maxMemoryUsageMb, int initialSizeMb, int extraBufferSizeMb)
        {
            InitialMemoryUsage = initialSizeMb * Mb;
            ExtraMemoryUsage   = extraBufferSizeMb * Mb;
            MaxBuffersCount    = (maxMemoryUsageMb * Mb - InitialMemoryUsage) / ExtraMemoryUsage;
            MaxMemoryUsage     = InitialMemoryUsage + ExtraMemoryUsage * MaxBuffersCount;

            array = new LockFreeItem <long> [MaxMemoryUsage / MinSize];

            empty = new LockFreeStack <long>(array, 0, array.Length);

            int count = 0;

            while (MaxSize >> count >= MinSize)
            {
                count++;
            }

            ready = new LockFreeStack <long> [count];
            for (int i = 0; i < ready.Length; i++)
            {
                ready[i] = new LockFreeStack <long>(array, -1, -1);
            }

            buffers    = new byte[MaxBuffersCount][];
            buffers[0] = NewBuffer(InitialMemoryUsage);
        }
예제 #2
0
        public LockFreePool(int size)
        {
            array = new LockFreeItem <T> [size];

            full  = new LockFreeStack <T>(array, -1, -1);
            empty = new LockFreeStack <T>(array, 0, array.Length);
        }
예제 #3
0
 public SocketRecycling(int maxSocket)
 {
     if (maxSocket > 0)
     {
         this.isEnabled = true;
         this.array     = new LockFreeItem <Socket> [maxSocket];
         this.empty     = new LockFreeStack <Socket>(this.array, 0, maxSocket);
         this.full4     = new LockFreeStack <Socket>(this.array, -1, -1);
         this.full6     = new LockFreeStack <Socket>(this.array, -1, -1);
     }
 }
예제 #4
0
        public SmartBufferPool(int maxMemoryUsageMb, int initialSizeMb, int extraBufferSizeMb)
        {
            this.InitialMemoryUsage = (long)initialSizeMb * 1048576L;
            this.ExtraMemoryUsage   = (long)extraBufferSizeMb * 1048576L;
            this.MaxBuffersCount    = ((long)maxMemoryUsageMb * 1048576L - this.InitialMemoryUsage) / this.ExtraMemoryUsage;
            this.MaxMemoryUsage     = this.InitialMemoryUsage + this.ExtraMemoryUsage * this.MaxBuffersCount;
            this.array = new LockFreeItem <long> [this.MaxMemoryUsage / 1024L];
            this.empty = new LockFreeStack <long>(this.array, 0, this.array.Length);
            int num = 0;

            while (262144 >> num >= 1024)
            {
                num++;
            }
            this.ready = new LockFreeStack <long> [num];
            for (int i = 0; i < this.ready.Length; i++)
            {
                this.ready[i] = new LockFreeStack <long>(this.array, -1, -1);
            }
            this.buffers    = new byte[this.MaxBuffersCount][];
            this.buffers[0] = SmartBufferPool.NewBuffer(this.InitialMemoryUsage);
        }
예제 #5
0
 public LockFreePool(int size)
 {
     this.array = new LockFreeItem <T> [size];
     this.full  = new LockFreeStack <T>(this.array, -1, -1);
     this.empty = new LockFreeStack <T>(this.array, 0, this.array.Length);
 }
예제 #6
0
 public LockFreeFastPool(int size)
 {
     array = new LockFreeItem <T> [size];
     full  = new LockFreeStack <T>(array, -1, -1);
 }
예제 #7
0
 public LockFreeFastPool(int size)
 {
     this.array = new LockFreeItem <T> [size];
     this.full  = new LockFreeStack <T>(this.array, -1, -1);
 }