2010-07-13 110 views
4

我试图缓存用户控件,并在一些页面上缓存单个对象。有多种方式来实现缓存,而我的头正在突破它。以编程方式缓存用户控件并清除缓存

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

你必须被设置为高速缓存30分钟控制了PartialCaching选项,它会清除自身后......你有VaryByParam时,以身份页通过查询字符串参数或其他不同的选项

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

你可以做HttpContext.Current.Cache.Insert(),它接受一个关键字,以后你可以通过使用remove来销毁高速缓存项...这可以将对象保存在缓存中,但是你可以使用诸如varyByParam之类的选项吗?

我的问题是烧毁两个:

  1. 有没有办法从代码清除特定的用户控件缓存?如果是的话,这可以根据不同的选项来完成吗?
  2. 对象缓存如何使用Insert()对登录的用户或匿名用户做出响应?

编辑: 我缓存多个东西....而且我真的大吃一惊,在选择缓存时做出选择。 Cache.Insert可以通过参数改变吗?

主要问题是人们从后端编辑东西,需要触发一个事件来重新实例化或清除引用该对象的所有缓存项目。

+0

什么是你缓存?看起来你正在做某种数据缓存,这与页面缓存(这是varyByParam的东西)有很大不同。 – CodingGorilla 2010-07-13 15:31:46

回答

2

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

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

+0

我使用sqlcachedependancy。它真的很整洁,我的页面仍然无限期地被缓存,直到我指定了一个表格的变化。 – 2011-09-08 15:51:29

3

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

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

现在,这只是让你的一部分,你正在寻找。这将删除该特定页面的所有缓存条目。 MSDN文档证实了这种行为。

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

现在我还将更加关注你在做什么,它可能是有道理的,只缓存实际数据,然后你可以添加/删除特定项目。但是,如果您的.control确实需要大量的CPU等来处理显示,那么输出缓存的想法就可以工作。