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); }
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); }
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))); }
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))); }
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); } }
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))); }
public MemoryCacheMemoizer(Type sourceClass, string nameOfMethodToBeMemoized) { this.name = MemoizerHelper.CreateParameterHash(sourceClass, nameOfMethodToBeMemoized); this.cache = new MemoryCache(this.name); }