Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不实例化要缓存的对象的情况下填充MemoryCache?_C#_.net_Lazy Evaluation_Memorycache - Fatal编程技术网

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;
    }
    
    。不知道我怎么会忽略了这一点!