MemoryCache 클래스는 존재하는 경우 얻을 수있는 스레드 안전 방법 인 .AddOrGetExisting이라는 메서드를 노출하고, 존재하지 않는 경우 추가합니다.불필요하게 캐싱 될 객체를 인스턴스화하지 않고 MemoryCache를 채우는 방법은 무엇입니까?
캐시 된 개체가없는 경우이 메서드는 NULL
을 반환합니다. 캐시의 존재에 관해 사용자에게 피드백을 제공하기 때문에이 값을 이해한다고 생각합니다.
내 캐시 해결은 다음과 같습니다
private static T GetCachedCollection<T>(Guid cacheKey, Lazy<T> initializer)
{
return (T) (MemoryCache.Default.AddOrGetExisting(cacheKey.ToString(), initializer.Value, _policy) ?? initializer.Value);
}
무엇을 달성하려고하는 것은이 필요하지 않은 오브젝트가 작성되지 않는 것입니다, 그리고 필요한 경우 내가 두 번을 구성하고 싶지 않아 .
내가 가진 Lazy
유형의 .Value
을 매개 변수로 전달하면 해당 항목이 캐시에 있는지 여부에 관계없이 초기화 프로그램을 호출 할 수 있습니다. 그러나 JIT를 제대로 이해하면 메서드의 대리자를 전달하고 이 아닌이 호출됩니다.
어떻게 이러한 목표를 달성해야 그 다음 한 번만 그것을 호출하는 캐시에없는 경우 이미 캐시에
- 가 개체 이니셜 라이저를 호출하지 마십시오.
브릴리언트. 어떻게 내가 그것을 간과하는지 명확히하지 않는다! – Matthew