출처 www.infoq.com/news/2007/01/CSharp-memory/">https://www.infoq.com/news/2007/01/CSharp-memory/
c#퓨어함수 캐싱 키워드로 검색할때 상용라이브러리 외에는 드럽게 안나오는데 겨우 2007년글 하나 나옴. 결국 딕셔너리가최선인가?
일케만 넣어두면 원하는대로 전역적으로도 쓸수있고 한 절차속에 가둘수도 있고 범용적인 디자인인듯
막상 쓰려니깐 나한테 퓨어하면서 딕셔너리 입출력보다 비싼 연산을 할일이 있는지 잘 모르겠음
저것보다 좋은방법 있으면 알려줘
public static Func<A, R> Memoize<A, R>(this Func<A, R> f)
{
var map = new Dictionary<A, R>();
return a => map.TryGetValue(a, out var value) ? value : map[a] = f(a);
}
public static Func<A, R> ConcurrentMemoize<A, R>(this Func<A, R> f)
{
var map = new ConcurrentDictionary<A, R>();
return a => map.GetOrAdd(a, f);
}
댓글 0