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); }
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); }