public LifespanManager(FluidCache <T> owner, int capacity, TimeSpan minAge, TimeSpan maxAge, GetNow getNow)
        {
            this.owner = owner;
            double maxMS = Math.Min(maxAge.TotalMilliseconds, (double)12 * 60 * 60 * 1000);  // max = 12 hours

            this.minAge           = minAge;
            this.getNow           = getNow;
            this.maxAge           = TimeSpan.FromMilliseconds(maxMS);
            validatyCheckInterval = TimeSpan.FromMilliseconds(maxMS / 240.0); // max timeslice = 3 min
            bagItemLimit          = Math.Max(capacity / 20, 1);               // max 5% of capacity per bag

            const int nrBags = 265;                                           // based on 240 timeslices + 20 bags for ItemLimit + 5 bags empty buffer

            bags = new OrderedAgeBagCollection <T>(nrBags);

            Stats = new CacheStats(capacity, nrBags, bagItemLimit, minAge, this.maxAge, validatyCheckInterval);

            OpenBag(0);
        }
Exemple #2
0
        public LifespanManager(FluidCache <T> owner, int capacity, TimeSpan minAge, TimeSpan maxAge, GetNow getNow)
        {
            this.owner  = owner;
            this.minAge = minAge;
            this.getNow = getNow;

            this.maxAge = TimeSpan.FromMilliseconds(Math.Min(maxAge.TotalMilliseconds, MaxMaxAge.TotalMilliseconds));

            validatyCheckInterval =
                TimeSpan.FromMilliseconds(Math.Min(maxAge.TotalMilliseconds, MaxInterval.TotalMilliseconds));

            bagItemLimit = Math.Max(capacity / PreferedNrOfBags, 1);

            int nrTimeSlices = (int)(MaxMaxAge.TotalMilliseconds / MaxInterval.TotalMilliseconds);

            // NOTE: Based on 240 timeslices + 20 bags for ItemLimit + 5 bags empty buffer
            int nrBags = nrTimeSlices + PreferedNrOfBags + EmptyBagsBuffer;

            bags = new OrderedAgeBagCollection <T>(nrBags);

            Stats = new CacheStats(capacity, nrBags, bagItemLimit, minAge, this.maxAge, validatyCheckInterval);

            OpenBag(0);
        }