Exemplo n.º 1
0
        private void GrowPool()
        {
            long newCapacity   = 2 * Capacity;
            var  newItemsCount = newCapacity - Capacity;

            if (IncludeMisses)
            {
                newCapacity += _misses;
            }


            if ((newCapacity - Capacity) > 100000)
            {
                newCapacity   = Capacity + 100000;
                newItemsCount = 100000;
            }

            int sizeToGrow = (int)newCapacity;

            if (sizeToGrow < 0)
            {
                return;
            }

            _pooledObjectStack.Resize((int)newCapacity);

            var newTop = _top + (int)newItemsCount;

            for (var i = _top; i < newTop; i++)
            {
                var instance = _pooledObjectStack[i % sizeToGrow] = GetInstanceSafe();
                instance.ResetLeasable();
            }

            _top  = newTop >= sizeToGrow ? sizeToGrow : newTop;
            Count = _top; Capacity = sizeToGrow;

            _hits          = 0;
            _misses        = 0;
            _totalRequests = 0;
        }