gpt4 book ai didi

c# - 如何清除 System.Runtime.Caching.MemoryCache

转载 作者:IT王子 更新时间:2023-10-29 04:01:11 24 4
gpt4 key购买 nike

我使用 System.Runtime.Caching.MemoryCache 来保存永不过期的项目。但是,有时我需要能够清除整个缓存。我该怎么做?

我问过类似的问题here关于我是否可以枚举缓存,但这是一个坏主意,因为它需要在枚举期间同步。

我试过使用 .Trim(100) 但这根本不起作用。

我已经尝试通过 Linq 获取所有键的列表,但后来我又回到了起点,因为一个一个地逐出项很容易导致竞争条件。

我想存储所有的 key ,然后为每个 key 发出一个 .Remove(key),但是那里也有一个隐含的竞争条件,所以我需要锁定对键列表,事情又变得一团糟。

然后我认为我应该能够在整个缓存上调用 .Dispose(),但由于它的实现方式,我不确定这是否是最佳方法。

使用 ChangeMonitors 不适合我的设计,而且对于这样一个微不足道的要求来说过于复杂。

那么,如何彻底清除缓存呢?

最佳答案

一开始我很纠结这个问题。 MemoryCache.Default.Trim(100) 不起作用(如前所述)。 Trim 是最好的尝试,因此如果缓存中有 100 个项目,并且您调用 Trim(100) 它将删除最少使用的项目。

Trim 返回移除的项目数,大多数人希望它移除所有项目。

此代码在我使用 MemoryCache.Default 的 xUnit 测试中为我从 MemoryCache 中删除了所有项目。 MemoryCache.Default 是默认区域。

foreach (var element in MemoryCache.Default)
{
MemoryCache.Default.Remove(element.Key);
}

关于c# - 如何清除 System.Runtime.Caching.MemoryCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com