我用System.Runtime.Caching.MemoryCache
来存放永不过期的物品.然而,有时我需要清除整个缓存的能力.我该怎么做?
我问了一个类似的问题here,关于我是否可以枚举缓存,但这是一个坏主意,因为它需要在枚举期间同步.
我试过用.Trim(100)
,但根本没用.
我试着通过Linq获取所有密钥的列表,但现在我又回到了开始的地方,因为逐条逐出条目很容易导致比赛条件.
我想存储所有的密钥,然后 for each 密钥分配.Remove(key)
,但这里也有一个隐含的竞争条件,所以我需要锁定对密钥列表的访问,然后事情又变得一团糟.
然后我认为我应该能够在整个缓存上调用.Dispose()
,但是由于它的实现方式,我不确定这是否是最好的方法.
对于我的设计来说,使用ChangeMonitors
不是一种 Select ,而且对于如此微不足道的要求来说也是不必要的复杂.
那么,我如何彻底清除缓存呢?