Tag: memoization

如何以编程方式检测副作用(编译时间或运行时间)?

我有一个关于缓存的想法,我已经开始实现了: 记忆函数并将返回与Velocity中的函数签名的散列一起存储。 使用PostSharp ,我想检查缓存并返回返回值的重新水合表示,而不是再次调用该函数。 我想使用属性来控制这种行为。 不幸的是,如果他们爱上了性能提升并开始使用缓存属性(包括一些带有副作 当memoization库怀疑某个函数可能会导致副作用时,我想发出一个编译器警告。 如何判断代码可能会导致使用CodeDom或Reflection产生副作用?

如何在c#中执行线程安全的函数memoization?

在堆栈溢出这里我发现了记忆单参数函数的代码: static Func Memoize(this Func f) { var d = new Dictionary(); return a=> { R r; if (!d.TryGetValue(a, out r)) { r = f(a); d.Add(a, r); } return r; }; } 虽然这段代码对我来说很有用,但是当同时从多个线程调用memoized函数时,它会失败: Add方法被相同的参数调用两次并抛出exception。 如何使memoization线程安全?