【问题标题】:Is it possible to clear the ASP.NET application Cache without resetting the AppDomain?是否可以在不重置 AppDomain 的情况下清除 ASP.NET 应用程序缓存?
【发布时间】:2011-01-19 02:10:11
【问题描述】:

我想重置/清除缓存中的项目,但没有重置应用程序或为此编写专门的页面。即,非编程解决方案。这可能吗?

【问题讨论】:

  • 别大惊小怪,写一些代码;)

标签: asp.net caching


【解决方案1】:

简短回答:不。

ASP.NET 缓存没有管理界面来管理它。你需要回收你的应用程序池,或者创建一个简单的页面来做Delete Items from the Cache in ASP.NET

编辑:受 Mick 回答的启发,您可以拥有这样的页面 (RemoveCache.aspx):

<%@ Page Language="C#" %>
<script runat="server">

    void Page_Load(object sender, EventArgs e)
    {
        if (String.IsNullOrEmpty(Request.QueryString["name"]))
        {
            foreach (DictionaryEntry item in Cache)
            {
                Cache.Remove(item.Key.ToString());
                Response.Write(item.Key.ToString() + " removed<br />");
            }
        }
        else
        {
            Cache.Remove(Request.QueryString["name"]);
        }
    }

</script>

如果您调用RemoveCache.aspx,您的所有缓存都将被删除;运行RemoveCache.aspx?name=Products,只会删除Products缓存条目。

【讨论】:

  • 这行不通。您不能在 foreach 循环中修改集合。
  • @Slaks,我刚刚跑到这里没有大问题(只是缺少 .ToString());你能确认一下这个问题吗?
  • 好的,谢谢各位。但是编写新代码需要重置 AppDomain。我不害怕写代码,只是想在不重置应用的情况下完成!
  • 我刚刚检查了来源。调用 GetEnumerator 会生成缓存的完整副本,因此它不是行为正确的枚举器。
  • 如果缓存集合被修改,这将引发异常。您可能想查看此链接 - stackoverflow.com/questions/6212676/…
【解决方案2】:
            Dim CacheKeys As New List(Of String)
            For Each CacheItem As DictionaryEntry In Cache
                CacheKeys.Add(CacheItem.Key)
            Next

            For Each Key As String In CacheKeys
                Cache.Remove(Key)
            Next

这似乎会通过缓存并清除项目,但不会清除响应缓存。如果您使用 FormsAuthentication 登录网页,转到网页,注销,然后只需在地址栏中键入该 URL,它就会返回该页面。当您单击任何内容时,它会将您返回到登录页面,因为您未通过身份验证,但即使单击注销按钮时缓存已清除,该页面仍会从缓存中显示。将 Cachability 设置为 NoCache 不起作用,因为所有使用 DataBound 事件的 GridView 在使用后退按钮时都显示为过期。我仍在为这种情况寻找合适的缓存清除解决方案。

【讨论】:

    【解决方案3】:

    手头只有 VB.NET 代码,但为什么不循环通过缓存删除项呢?

    For Each de As DictionaryEntry In HttpContext.Current.Cache
    
    HttpContext.Current.Cache.Remove(DirectCast(de.Key, String))
    
    Next
    

    问候

    【讨论】:

    • 这行不通。您不能在 For Each 循环中修改集合。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2021-06-21
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多