我在我的webuser控件(.ascx)上使用OutputCache
<%@ OutputCache Duration="1000" VaryByParam="none" %>
我想在接下来的1000秒内保留缓存,但是当我的网站上的特定页面被加载时,我想删除/刷新/刷新缓存.就像,我想在加载MyPage.aspx时清除缓存.我可以在程序上刷新缓存吗?
它只有一个页面是缓存,因此没有用于刷新缓存的paramatrized版本.
感谢您的帮助.
您可以使用此VaryByCustom
参数.
在您的用户控件中,您将拥有以下内容:
<%@ OutputCache Duration="1000" VaryByParam="None" VaryByCustom="MyKey" %>
然后你将覆盖GetVaryByCustomString
Global.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
等)
这里有一个概述这里.
您可以使用HttpResponse.RemoveOutputCacheItem
或HttpResponse.AddCacheItemDependency
使输出缓存条目无效.
破解一种坚定的方法是一个大锤,但它是完全清除/刷新我发现的应用程序缓存的最简单,最有效的方法.
只需致电:
HttpRuntime.UnloadAppDomain();
这与回收应用程序池具有相同的影响.不适合所有情况,但它肯定会完成工作.