예제 #1
0
        public bool ShouldFreeMemory(IBufferPool bufferPool)
        {
            var now = DateTime.UtcNow.Ticks;

            if (now - bufferPool.MemoryManager.LastReserveTicks <= settings.BaseDelayAfterReserve.Ticks)
            {
                return(false);
            }

            if (now - lastFreeMemoryAttemptTicks <= settings.Cooldown.Ticks)
            {
                return(false);
            }

            if (globalMemoryManager.Capacity <= settings.MinimumGlobalMemoryLimitUtilization * globalMemoryManager.CapacityLimit)
            {
                return(false);
            }

            if (bufferPool.MemoryManager.Capacity <= settings.MinimumStreamMemoryLimitUtilization * bufferPool.MemoryManager.CapacityLimit)
            {
                return(false);
            }

            if (bufferPool.Count() <= settings.MinimumBuffersLimit)
            {
                return(false);
            }

            lastFreeMemoryAttemptTicks = now;
            return(true);
        }