我用System.Runtime.Caching.MemoryCache来存放永不过期的物品.然而,有时我需要清除整个缓存的能力.我该怎么做?

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

我试过用.Trim(100),但根本没用.

我试着通过Linq获取所有密钥的列表,但现在我又回到了开始的地方,因为逐条逐出条目很容易导致比赛条件.

我想存储所有的密钥,然后 for each 密钥分配.Remove(key),但这里也有一个隐含的竞争条件,所以我需要锁定对密钥列表的访问,然后事情又变得一团糟.

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

对于我的设计来说,使用ChangeMonitors不是一种 Select ,而且对于如此微不足道的要求来说也是不必要的复杂.

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

推荐答案

如果想继续使用MemoryCache的默认成员,则不应调用dispose:

缓存的状态设置为指示缓存已被释放.

关于修剪,它应该是有效的:

Trim属性首先删除超过绝对过期或滑动过期的条目.任何已注册的回调

如果删除过期条目不足以达到指定的修剪百分比,则会从缓存中删除其他条目

但是另外两个用户报告它在同一个页面上不起作用,所以我猜你被Remove()http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.trim.aspx卡住了

Update

但是,如果您需要从默认实例中释放内存,则必须手动清除它,或者通过Dispose永久销毁它(使其不可用).

根据您的问题,您可以创建自己的单例强制类,返回一个可以在内部随意处理的内存缓存.属于高速缓存的性质:-)

Asp.net相关问答推荐

为什么 @Html.EditorFor 和 @Html.PasswordFor 在 MVC 中创建不同的样式框?

.net 中的 [] 括号是什么?

为什么 Web 架构应该是松耦合的?

如何在现有数据库中创建 ASP.Net Identity 表?

创建项目 ASP.NET Core (.NET Core) 和 ASP.NET Core (.NET Framework) 有什么区别

IIS 中的嵌套 ASP.NET应用程序继承父配置值?

格式化 DataBinder.Eval 数据

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

如何将 Castle Windsor 与 ASP.Net Web 表单一起使用?

ASP.NET MVC 中的 ASP.NET AJAX 与 jQuery

如何在 ASP.NET core rc2 中禁用浏览器缓存?

__doPostBack 未定义

HTTP 错误 401.3 - 未经授权

如何在 ASP.Net 的客户端 (JavaScript) 上判断 Page.Validate()?

ASP.NET 身份,需要强密码

在.net的内存数据库中

中继器中的中继器

Windows 身份验证在本地 IIS 7.5 上不起作用.错误 401.1

jQuery Ajax 调用 - 成功设置变量值

静态变量是线程安全的吗? C#