缓存用户控件并以编程方式清除该缓存

时间:2010-07-13 15:27:45

标签: asp.net caching

我正在尝试缓存用户控件,而在某些页面上我想缓存单个对象。有多种方法可以实现缓存,我的头脑正在突破它。

我现在看到缓存选项的方式:

你有PartialCaching选项设置为缓存控件30分钟,然后它清除自己...你有varyByParam通过其查询字符串参数...或其他不同的选项来识别页面

但是我无法找到一种向控件添加缓存的合适方法,并且当我从后端更新控件中使用的一个对象时能够以编程方式清除缓存。

您可以执行HttpContext.Current.Cache.Insert(),它接受一个键,您可以稍后通过使用remove来销毁缓存项...这可以保存缓存中的对象,但是您可以使用varyByParam等选项吗? / p>

我的问题被归结为两个:

  1. 有没有办法从代码中清除特定用户控件的缓存?如果是,可以根据varyby选项进行吗?
  2. 对象缓存如何使用Insert()响应登录用户或匿名用户?
  3. 编辑: 我正在缓存多种事情......我真的很惊讶于选择缓存。 Cache.Insert可以通过参数改变吗?

    主要问题是从后端编辑内容,需要触发一个事件,重新启用或清除引用该对象的所有缓存项。

2 个答案:

答案 0 :(得分:3)

您可以使用以下方法从输出缓存中删除项目。

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");

现在,这只会让你成为你想要的一部分。这将删除该特定页面的所有缓存条目。 MSDN文档确认了该行为。

至于你的另一个问题,Cache.Insert()是整个应用程序的单个缓存存储,不考虑用户身份。

现在我还要更深入地了解您正在做什么,只有缓存实际数据才有意义,然后您可以添加/删除特定项目。但是,如果您的.control确实占用了大量CPU等来处理显示,那么输出缓存的想法就可以了。

答案 1 :(得分:2)

使用System.Web.Caching.Cache类可以缓存项目并为缓存中的项目创建依赖项。如果您使用的是SQL服务器,则可以使用SqlCacheDependency类根据数据库清除缓存中的项目。

否则,您可以创建自己的CacheDependency类派生词,您可以使用它来完成同样的事情。我发现这个post描述了这样做。