コード例 #1
0
        public TResult Invoke <TParam1, TParam2>(Func <TParam1, TParam2, TResult> memoizedMethod, TParam1 arg1, TParam2 arg2)
        {
            string  key = MemoizerHelper.CreateParameterHash(arg1, arg2);
            TResult retVal;

            if (this.cache.TryGetValue(key, out retVal))
            {
                return(retVal);
            }

            retVal = memoizedMethod.Invoke(arg1, arg2);
            this.cache.TryAdd(key, retVal);
            return(retVal);
        }
コード例 #2
0
        public TResult Invoke <TParam1, TParam2>(Func <TParam1, TParam2, TResult> memoizedMethod, TParam1 arg1, TParam2 arg2)
        {
            string  key    = MemoizerHelper.CreateParameterHash(arg1, arg2);
            TResult retVal = (TResult)this.cache.Get(key);

            if (retVal != null)
            {
                return(retVal);
            }

            retVal = memoizedMethod.Invoke(arg1, arg2);
            this.cache.Add(key, retVal, NO_CACHE_POLICY);
            return(retVal);
        }
コード例 #3
0
        public void PrimitiveParameterHashingTests()
        {
            //Console.WriteLine(2L.GetHashCode());
            //Console.WriteLine(2M.GetHashCode());
            //Console.WriteLine(2L.GetType().GetHashCode());
            //Console.WriteLine(2M.GetType().GetHashCode());
            //Assert.That(2L.GetHashCode(), Is.Not.EqualTo(2M.GetHashCode()));

            Assert.That(MemoizerHelper.CreateParameterHash(2L), Is.EqualTo(MemoizerHelper.CreateParameterHash(2L)));
            Assert.That(MemoizerHelper.CreateParameterHash(2L), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(2M)));
            Assert.That(MemoizerHelper.CreateParameterHash(2L, 2M), Is.EqualTo(MemoizerHelper.CreateParameterHash(2L, 2M)));
            Assert.That(MemoizerHelper.CreateParameterHash(2L, 2M), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(2M, 2L)));

            Assert.That(MemoizerHelper.CreateParameterHash("2L"), Is.EqualTo(MemoizerHelper.CreateParameterHash("2L")));
            Assert.That(MemoizerHelper.CreateParameterHash("2L"), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(2L)));
            Assert.That(MemoizerHelper.CreateParameterHash("2L", 2L), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(2L, "2L")));
            Assert.That(MemoizerHelper.CreateParameterHash("2L", 2L), Is.EqualTo(MemoizerHelper.CreateParameterHash("2L", 2L)));
        }
コード例 #4
0
        public void ValueObjectParameterHashingTests()
        {
            SomeValueClass someValueObject1A = new SomeValueClass {
                IntProperty = 1, StringProperty = "1"
            };
            SomeValueClass someValueObject1B = new SomeValueClass {
                IntProperty = 1, StringProperty = "1"
            };
            SomeValueClass someValueObject1C = new SomeValueClass {
                IntProperty = 1, StringProperty = "1"
            };
            SomeValueClass someValueObject2 = new SomeValueClass {
                IntProperty = 2, StringProperty = "2"
            };
            SomeValueClass someValueObject3 = new SomeValueClass {
                IntProperty = 3, StringProperty = "3"
            };

            someValueObject1A.ChildrenProperty = new List <SomeValueClass> {
                someValueObject2, someValueObject3
            };
            someValueObject1B.ChildrenProperty = new List <SomeValueClass> {
                someValueObject2, someValueObject3
            };
            someValueObject1C.ChildrenProperty = new List <SomeValueClass> {
                someValueObject2, someValueObject3, someValueObject2, someValueObject3
            };

            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A), Is.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1A)));
            // NB! Value equality
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A), Is.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1B)));

            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1C)));
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject2)));
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject3)));

            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject1B), Is.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject1B)));
            // NB! Value equality
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject1B), Is.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1B, someValueObject1A)));
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject1C), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1C, someValueObject1A)));
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject2), Is.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject2)));
            Assert.That(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject2), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someValueObject1A, someValueObject1A)));
        }
コード例 #5
0
        public TResult Invoke <TParam1, TParam2>(Func <TParam1, TParam2, TResult> memoizedMethod, TParam1 arg1, TParam2 arg2)
        {
            string key = MemoizerHelper.CreateParameterHash(arg1, arg2);

            if (this.cache.ContainsKey(key))
            {
                return((TResult)cache[key]);
            }

            lock (@lock)
            {
                if (this.cache.ContainsKey(key))
                {
                    return((TResult)cache[key]);
                }
                TResult retVal = memoizedMethod.Invoke(arg1, arg2);
                this.cache.Add(key, retVal);
                return(retVal);
            }
        }
コード例 #6
0
        public void EntityObjectParameterHashingTests()
        {
            SomeEntityClass someEntityObject1A = new SomeEntityClass {
                IntProperty = 1, StringProperty = "1"
            };
            SomeEntityClass someEntityObject1B = new SomeEntityClass {
                IntProperty = 1, StringProperty = "1"
            };
            SomeEntityClass someEntityObject1C = new SomeEntityClass {
                IntProperty = 1, StringProperty = "1"
            };
            SomeEntityClass someEntityObject2 = new SomeEntityClass {
                IntProperty = 2, StringProperty = "2"
            };
            SomeEntityClass someEntityObject3 = new SomeEntityClass {
                IntProperty = 3, StringProperty = "3"
            };

            someEntityObject1A.ChildrenProperty = new List <SomeEntityClass> {
                someEntityObject2, someEntityObject3
            };
            someEntityObject1B.ChildrenProperty = new List <SomeEntityClass> {
                someEntityObject2, someEntityObject3
            };
            someEntityObject1C.ChildrenProperty = new List <SomeEntityClass> {
                someEntityObject2, someEntityObject3, someEntityObject2, someEntityObject3
            };

            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A), Is.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject1A)));
            // NB! Different entity objects are never equal
            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject1B)));

            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject1C)));
            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject2)));
            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject3)));

            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A, someEntityObject2), Is.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject1A, someEntityObject2)));
            Assert.That(MemoizerHelper.CreateParameterHash(someEntityObject1A, someEntityObject2), Is.Not.EqualTo(MemoizerHelper.CreateParameterHash(someEntityObject1A, someEntityObject1A)));
        }
コード例 #7
0
 public MemoryCacheMemoizer(Type sourceClass, string nameOfMethodToBeMemoized)
 {
     this.name  = MemoizerHelper.CreateParameterHash(sourceClass, nameOfMethodToBeMemoized);
     this.cache = new MemoryCache(this.name);
 }