Cache property lookups for the object parsing
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace LeafWeb.Core.Utility
|
||||
{
|
||||
public static class Memoizer
|
||||
{
|
||||
public static Func<A, R> ThreadsafeMemoize<A, R>(Func<A, R> f)
|
||||
{
|
||||
var cache = new ConcurrentDictionary<A, R>();
|
||||
|
||||
return argument => cache.GetOrAdd(argument, f);
|
||||
}
|
||||
|
||||
public static Func<A1, A2, R> ThreadsafeMemoize<A1, A2, R>(Func<A1, A2, R> f)
|
||||
{
|
||||
var cache = new ConcurrentDictionary<Tuple<A1, A2>, R>();
|
||||
|
||||
return (a1, a2) => cache.GetOrAdd(Tuple.Create(a1, a2), t => f(t.Item1, t.Item2));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user