C# 如何在不实例化要缓存的对象的情况下填充MemoryCache?
该类公开了一个名为的方法,这是一种线程安全的方法,用于在存在时获取,在不存在时添加 如果缓存的对象不存在,此方法将返回C# 如何在不实例化要缓存的对象的情况下填充MemoryCache?,c#,.net,lazy-evaluation,memorycache,C#,.net,Lazy Evaluation,Memorycache,该类公开了一个名为的方法,这是一种线程安全的方法,用于在存在时获取,在不存在时添加 如果缓存的对象不存在,此方法将返回NULL。我想我理解了它的价值,因为它向用户提供了关于它在缓存中存在的反馈 我的缓存解析程序如下所示: private static T GetCachedCollection<T>(Guid cacheKey, Lazy<T> initializer) { return (T) (MemoryCache.Default.AddOrGetExist
NULL
。我想我理解了它的价值,因为它向用户提供了关于它在缓存中存在的反馈
我的缓存解析程序如下所示:
private static T GetCachedCollection<T>(Guid cacheKey, Lazy<T> initializer)
{
return (T) (MemoryCache.Default.AddOrGetExisting(cacheKey.ToString(), initializer.Value, _policy) ?? initializer.Value);
}
private static T GetCachedCollection(Guid cacheKey,惰性初始值设定项)
{
return(T)(MemoryCache.Default.AddOrGetExisting(cacheKey.ToString(),initializer.Value,_policy)??initializer.Value);
}
我试图实现的是,除非需要,否则不会创建对象,如果需要,我不想构建它两次
我担心的是,当我将我的Lazy
类型的.Value
作为参数传递时,它可能会调用初始值设定项,而不管该项是否在缓存中找到。但是,如果我正确理解JIT,它将传递方法的委托,而不是调用它
我应该如何实现这些目标:
不要将对象存储在缓存中,而是存储
惰性
private static T GetCachedCollection<T>(Guid cacheKey, Lazy<T> initializer)
{
var cachedValue = (Lazy<T>)(MemoryCache.Default.AddOrGetExisting(
cacheKey.ToString(), initializer, _policy) ?? initializer);
return cachedValue.Value;
}
private static T GetCachedCollection(Guid cacheKey,惰性初始值设定项)
{
var cachedValue=(Lazy)(MemoryCache.Default.AddOrGetExisting(
cacheKey.ToString(),初始值设定项,_policy)??初始值设定项);
返回cachedValue.Value;
}
。不知道我怎么会忽略了这一点!