public void Test1() { var cacheLinkedList = new CacheLinkedList <string, string>(); cacheLinkedList.Add(new CacheNode <string, string>("item1", "1")); cacheLinkedList.Add(new CacheNode <string, string>("item2", "2")); var removed = cacheLinkedList.Remove(); Assert.AreEqual("item1", removed.GetKey()); Assert.AreEqual("1", removed.GetData()); removed = cacheLinkedList.Remove(); Assert.AreEqual("item2", removed.GetKey()); Assert.AreEqual("2", removed.GetData()); }
public void Test2() { var cacheLinkedList = new CacheLinkedList <string, string>(); for (var i = 0; i < 1000; i++) { cacheLinkedList.Add(new CacheNode <string, string>(i + "", i + "")); } for (var i = 0; i < 1000; i++) { var removed = cacheLinkedList.Remove(); Assert.AreEqual(i + "", removed.GetKey()); Assert.AreEqual(i + "", removed.GetData()); } }
/// <summary> /// Constructs a new instance of the cache. /// </summary> /// <param name="cacheSize"> /// The number of items to store in the cache /// </param> /// <param name="concurrency"> /// The expected number of concurrent requests to the cache /// </param> internal LruCache(int cacheSize, int concurrency) { if (concurrency <= 0) { throw new ArgumentOutOfRangeException( "concurrency", "Concurrency must be a positive integer greater than 0."); } CacheSize = cacheSize; _dictionary = new ConcurrentDictionary <K, CachedItem>( concurrency, cacheSize); _linkedLists = new CacheLinkedList[concurrency]; for (int i = 0; i < _linkedLists.Length; i++) { _linkedLists[i] = new CacheLinkedList(this); } }
internal CachedItem(CacheLinkedList list, K key, V value) { List = list; Key = key; Value = value; }