C# Generic Cache Manager Example
This examples shows how to implement a generic cache manager class in C#. We often need to cache to the some objects in our programs, ecpecially for objects that frequently access. Following sample is implemented for this purpose.
Usage:
CacheManager<string> cm = new CacheManager<string>(); //keep this instance in a class cm.Add("key1", "data1", 5000); //remove after 5 sc cm.Add("key2", "data2"); //don't remove from cache cm.Add("key3", "data3", 3000); //remove after 3 sc cm.Add("key4", "data4"); //don't remove from cache
Also if we want to use only one cache manager instance, we can use Singleton Pattern in Design Patterns.
For more information about Singleton Pattern:
https://csharpexamples.com/c-multithread-singleton-pattern-example
Generic Cache Manager Class:
public class CacheManager<T> { private Dictionary<string, T> _items = null; public CacheManager() { _items = new Dictionary<string, T>(); } private void TimerProc(object state) { //Remove the cached object string key = state.ToString(); this.Remove(key); } public void Add(string key, T obj, int cacheTime = System.Threading.Timeout.Infinite) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException("key is null."); if (_items.Keys.Contains(key)) throw new ArgumentException("An element with the same key already exists."); //Set timer System.Threading.Timer t = new System.Threading.Timer(new TimerCallback(TimerProc), key, cacheTime, System.Threading.Timeout.Infinite); _items.Add(key, obj); } public bool Remove(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException("key is null."); return _items.Remove(key); } public T Get(string key) { if (string.IsNullOrEmpty(key)) throw new ArgumentNullException("key is null."); if (!_items.Keys.Contains(key)) throw new KeyNotFoundException("key does not exist in the collection."); return _items[key]; } public void Clear() { _items.Clear(); } }