是否可以在不重置AppDomain的情况下清除ASP.NET应用程序缓存?

时间:2010-02-03 01:18:14

标签: asp.net caching

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

3 个答案:

答案 0 :(得分:8)

简短回答:不。

ASP.NET Cache没有管理它的管理界面。您需要回收应用程序池,或者创建一个简单的页面来执行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缓存条目。

答案 1 :(得分: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在使用后退按钮时都显示为已过期。我仍在为这种情况寻找合适的缓存清理解决方案。

答案 2 :(得分:1)

只提供VB.NET代码,但为什么不循环删除缓存项?

For Each de As DictionaryEntry In HttpContext.Current.Cache

HttpContext.Current.Cache.Remove(DirectCast(de.Key, String))

Next

此致