コード例 #1
0
        public void Test_Remove()
        {
            SmartCache <int> cache = new SmartCache <int>(5);

            int item;

            Assert.AreEqual(0, cache.ItemCount);

            Assert.IsFalse(cache.TryGetValue("1", out item));

            cache.Add("1", 1);
            Assert.AreEqual(1, cache.ItemCount);

            cache.Add("1", 1);
            cache.Add("2", 2);
            cache.Add("3", 3);
            cache.Add("4", 4);
            cache.Add("5", 5);
            Assert.AreEqual(5, cache.ItemCount);

            cache.Remove("3");
            Assert.IsTrue(cache.TryGetValue("1", out item));
            Assert.AreEqual(1, item);
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.AreEqual(2, item);
            Assert.IsFalse(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.AreEqual(4, item);
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(5, item);
            Assert.AreEqual(4, cache.ItemCount);

            cache.Remove("1");
            Assert.IsFalse(cache.TryGetValue("1", out item));
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.AreEqual(2, item);
            Assert.IsFalse(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.AreEqual(4, item);
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(5, item);
            Assert.AreEqual(3, cache.ItemCount);

            cache.Add("3", 3);
            Assert.IsFalse(cache.TryGetValue("1", out item));
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.IsTrue(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(4, cache.ItemCount);

            cache.Remove("6");
            Assert.IsFalse(cache.TryGetValue("1", out item));
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.IsTrue(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(4, cache.ItemCount);
        }
コード例 #2
0
        private void ThreadCacheRemove(object data)
        {
            SmartCache <int> cache = (SmartCache <int>)data;

            try
            {
                Random random = new Random();

                for (int i = 0; i < 10000; i++)
                {
                    int x;

                    if (!cache.TryGetValue(i.ToString(), out x))
                    {
                        if (random.Next() % 4 != 0)
                        {
                            cache.Remove(i.ToString());
                        }
                        else
                        {
                            cache.Add(i.ToString(), i);
                        }
                    }
                    else
                    {
                        if (random.Next() % 3 == 0)
                        {
                            cache.Remove(i.ToString());
                        }
                    }
                }
            }
            catch
            {
                lock (_exceptionCountLock)
                    _exceptionCount++;

                throw;
            }
        }
コード例 #3
0
ファイル: MiniSecurity.cs プロジェクト: dumpvn/minimvc
 public void RemoveCache(string key)
 {
     _cache.Remove(key);
 }
コード例 #4
0
ファイル: SmartCache_Fixture.cs プロジェクト: jcmm33/core
        public void Test_Remove()
        {
            SmartCache<int> cache = new SmartCache<int>(5);

            int item;

            Assert.AreEqual(0, cache.ItemCount);

            Assert.IsFalse(cache.TryGetValue("1", out item));

            cache.Add("1", 1);
            Assert.AreEqual(1, cache.ItemCount);

            cache.Add("1", 1);
            cache.Add("2", 2);
            cache.Add("3", 3);
            cache.Add("4", 4);
            cache.Add("5", 5);
            Assert.AreEqual(5, cache.ItemCount);

            cache.Remove("3");
            Assert.IsTrue(cache.TryGetValue("1", out item));
            Assert.AreEqual(1, item);
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.AreEqual(2, item);
            Assert.IsFalse(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.AreEqual(4, item);
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(5, item);
            Assert.AreEqual(4, cache.ItemCount);

            cache.Remove("1");
            Assert.IsFalse(cache.TryGetValue("1", out item));
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.AreEqual(2, item);
            Assert.IsFalse(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.AreEqual(4, item);
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(5, item);
            Assert.AreEqual(3, cache.ItemCount);

            cache.Add("3", 3);
            Assert.IsFalse(cache.TryGetValue("1", out item));
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.IsTrue(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(4, cache.ItemCount);

            cache.Remove("6");
            Assert.IsFalse(cache.TryGetValue("1", out item));
            Assert.IsTrue(cache.TryGetValue("2", out item));
            Assert.IsTrue(cache.TryGetValue("3", out item));
            Assert.IsTrue(cache.TryGetValue("4", out item));
            Assert.IsTrue(cache.TryGetValue("5", out item));
            Assert.AreEqual(4, cache.ItemCount);
        }
コード例 #5
0
        public void ThreadedRemoveTest()
        {
            SmartCache <int> cache = new SmartCache <int>(50);

            Thread[] threads = new Thread[50];

            int    exceptionCount     = 0;
            object exceptionCountLock = new object();

            ParameterizedThreadStart t = o =>
            {
                try
                {
                    Random random = new Random();

                    for (int i1 = 0; i1 < 10000; i1++)
                    {
                        int x;

                        if (!cache.TryGetValue(i1.ToString(), out x))
                        {
                            if (random.Next() % 4 != 0)
                            {
                                cache.Remove(i1.ToString());
                            }
                            else
                            {
                                cache.Add(i1.ToString(), i1);
                            }
                        }
                        else
                        {
                            if (random.Next() % 3 == 0)
                            {
                                cache.Remove(i1.ToString());
                            }
                        }
                    }
                }
                catch
                {
                    lock (exceptionCountLock)
                        exceptionCount++;

                    throw;
                }
            };

            for (int i = 0; i < 50; i++)
            {
                threads[i] = new Thread(t);

                threads[i].Start();
            }

            for (int i = 0; i < 50; i++)
            {
                threads[i].Join();
            }

            Assert.AreEqual(50, cache.ItemCount);
            Assert.AreEqual(0, exceptionCount);
        }