当前位置:  开发笔记 > 后端 > 正文

有什么办法清除/刷新/删除OutputCache?

如何解决《有什么办法清除/刷新/删除OutputCache?》经验,为你挑选了3个好方法。

我在我的webuser控件(.ascx)上使用OutputCache

<%@ OutputCache Duration="1000" VaryByParam="none" %>

我想在接下来的1000秒内保留缓存,但是当我的网站上的特定页面被加载时,我想删除/刷新/刷新缓存.就像,我想在加载MyPage.aspx时清除缓存.我可以在程序上刷新缓存吗?

它只有一个页面是缓存,因此没有用于刷新缓存的paramatrized版本.

感谢您的帮助.



1> LukeH..:

您可以使用此VaryByCustom参数.

在您的用户控件中,您将拥有以下内容:

<%@ OutputCache Duration="1000" VaryByParam="None" VaryByCustom="MyKey" %>

然后你将覆盖GetVaryByCustomStringGlobal.asax中的方法,如下所示:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg == "MyKey")
    {
        object o = context.Current.Application["MyGuid"];
        if (o == null)
        {
            o = Guid.NewGuid();
            context.Current.Application["MyGuid"] = o;
        }
        return o.ToString();
    }
    return base.GetVaryByCustomString(context, arg);
}

最后,MyPage.aspx你会这样做:

Application["MyGuid"] = Guid.NewGuid();

这是如何运作的?

每当您的控件被缓存时,它都与一个字符串相关联(GetVaryByCustomString当您的控件的VaryByCustom键传入其中时,从该方法返回的字符串).

无论何时随后使用控件,GetVaryByCustomString都会再次调用.如果返回的字符串与控件的缓存版本匹配,则使用缓存版本.

在我们的例子中,传递"MyKey" GetVaryByCustomString并返回存储的内容Application["MyGuid"].

无论何时MyPage.aspx调用,它都会更改Application["MyGuid"]为新的随机值.

下次使用您的控件时,该GetVaryByCustomString方法将返回新值,并且由于没有与该值关联的控件的缓存版本,因此将重新生成控件.(然后控件将被缓存并与新值相关联,以持续到下一次调用MyPage.aspx等)

这里有一个概述这里.



2> Josef Pflege..:

您可以使用HttpResponse.RemoveOutputCacheItemHttpResponse.AddCacheItemDependency使输出缓存条目无效.


如果OutputCacheProvider不是默认值(例如,您使用的是AppFabric或MemCached),则这些方法将不起作用.对于任何考虑他们的选择的人来说,只是一个提醒...我认为VaryByCustom的答案是可取的,因为它可以在任何一种情况下工作.

3> Tom Styles..:

破解一种坚定的方法是一个大锤,但它是完全清除/刷新我发现的应用程序缓存的最简单,最有效的方法.

只需致电:

HttpRuntime.UnloadAppDomain();

这与回收应用程序池具有相同的影响.不适合所有情况,但它肯定会完成工作.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有