相关疑难解决方法(0)

如何清除MemoryCache?

我使用MemoryCache类创建了一个缓存.我添加了一些项目,但是当我需要重新加载缓存时,我想首先清除它.最快的方法是什么?我应该遍历所有项目并一次删除一个项目还是有更好的方法?

c# memory caching .net-4.0 memorycache

91
推荐指数
6
解决办法
8万
查看次数

我可以迭代.NET4 MemoryCache吗?

我正在使用提供的缓存System.Runtime.Caching.MemoryCache.

我想枚举缓存的项目,以便我可以无效(逐出然后重新加载)项目

foreach (var item in MemoryCache.Default) { item.invalidate() }
Run Code Online (Sandbox Code Playgroud)

这里发现的官方文件说:

!重要:检索MemoryCache实例的枚举器是一项资源密集型和阻塞操作.因此,不应在生产应用程序中使用枚举器.

当然必须有一种简单有效的方法来迭代缓存的项目?

c# asp.net caching .net-4.0

19
推荐指数
1
解决办法
1万
查看次数

LINQ on循环条件

我们假设我有以下代码:

IEnumerable<string> allKeys = _cache.Select(o => o.Key);
Parallel.ForEach(allKeys, key => _cache.Remove(key));
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在检索所有密钥_cache,将它们存储在我的本地变量中allKeys,然后同时从中删除所有密钥_cache.

但是,我想要做一行.所以我想到的是:

Parallel.ForEach(_cache.Select(o => o.Key), key => _cache.Remove(key));
Run Code Online (Sandbox Code Playgroud)

但是_cache.Select(o => o.Key)每次循环迭代都会调用该语句,因此每次都会检索不同数量的元素(因为我正在同时删除它们).

后一行代码是否安全?

是否_cache.Select(o => o.Key)在循环语句,只被调用一次,然后每一次迭代使用原来的结果,抑或是在每个迭代步骤处理?

.net c# linq iteration loops

6
推荐指数
1
解决办法
279
查看次数

IMemoryCache中的ASP.NET Core清除缓存(由CacheExtensions类的Set方法设置)

乍一看,这似乎是该问题的重复,但是我没有问如何清除EF的缓存。

如何清除IMemoryCache接口设置的整个缓存?

    public CacheService(IMemoryCache memoryCache) 
    {
        this._memoryCache = memoryCache;
    }

    public async Task<List<string>> GetCacheItem()
    {
        if (!this._memoryCache.TryGetValue("Something", out List<string> list))
        {
            list= await this ...

            this._memoryCache.Set("Something", list, new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.NeverRemove));
        }

        return list;
    }
Run Code Online (Sandbox Code Playgroud)

这只是一个例子。我有许多类/方法正在存储要缓存的值。现在,我需要将其全部删除。

在某些情况下,我的密钥是动态创建的,因此我不知道需要删除哪些密钥。清除将是完美的。

我可以编写自己的接口和类以供内部使用IMemoryCache,但这似乎有些过分。有没有更简单的选择?

.net-core asp.net-core

3
推荐指数
2
解决办法
4586
查看次数