public void OnBeforeItemSavedToCache(IDataCache dataCache, string key, object data) { // EXPECTS PROPERLY FORMATED CACHE KEYS try { List <string> orderedKeys = dataCache.CacheKeys.OrderBy(x => x).ToList(); #if DEBUG /* * Container.Track.LogTrace(string.Format("<Cache Details: {0} - {1}>", dataCache.CacheKeys.Length, dataCache.CacheCount)); * foreach(var item in orderedKeys) * { * Container.Track.LogTrace(string.Format(" {0}", item)); * } * Container.Track.LogTrace(string.Format("</Cache Details>")); */ #endif if (dataCache.CacheCount > this.MaximumKeyCount) { // simple strategy to try to trim from both directions _direction = !_direction; if (!_direction) { orderedKeys.Reverse(); } string[] keys = dataCache.CacheKeys; int keyIndex = -1; for (int i = 0; i < this.RemoveKeyBufferCount; i++) { if (orderedKeys.Count > 0) { string itemToRemove = string.Empty; while (keyIndex < orderedKeys.Count) { keyIndex++; string item = orderedKeys[keyIndex]; if (!item.Contains("?") && !key.Contains(item) && key != item) { itemToRemove = item; break; } } if (!string.IsNullOrEmpty(itemToRemove)) { //Container.Track.LogTrace(string.Format(" ----> Removed From Cache: {0}", itemToRemove)); dataCache.ClearWithPrefix(itemToRemove); } } } } } catch { } }
public void OnBeforeItemSavedToCache(IDataCache dataCache, string key, object data) { if (this.ClearPrefixes.ContainsKey(key)) { string prefix = this.ClearPrefixes[key]; this.ClearPrefixes.Remove(key); dataCache.ClearWithPrefix(prefix); } }