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

Asp.net 缓存用户控件并以编程方式清除该缓存,asp.net,caching,Asp.net,Caching,我试图缓存用户控件,在某些页面上我想缓存单个对象。有多种实现缓存的方法,我的脑子都快崩溃了 我现在看到缓存选项的方式: 您有PartialCaching选项,该选项设置为将控件缓存30分钟,然后它会自行清除。。。您可以使用varyByParam通过其querystring参数标识页面。。。或其他不同的选择 但是我找不到合适的方法向控件添加缓存,也无法在从后端更新控件中使用的一个对象时以编程方式清除缓存 您可以执行HttpContext.Current.Cache.Insert(),它接受一个键,

我试图缓存用户控件,在某些页面上我想缓存单个对象。有多种实现缓存的方法,我的脑子都快崩溃了

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

您有PartialCaching选项,该选项设置为将控件缓存30分钟,然后它会自行清除。。。您可以使用varyByParam通过其querystring参数标识页面。。。或其他不同的选择

但是我找不到合适的方法向控件添加缓存,也无法在从后端更新控件中使用的一个对象时以编程方式清除缓存

您可以执行HttpContext.Current.Cache.Insert(),它接受一个键,您可以稍后使用remove来销毁该缓存项。。。这可以将对象保存在缓存中,但可以使用varyByParam之类的选项吗

我的问题归结为两个:

  • 有没有办法从代码中清除特定用户控件上的缓存?如果是,是否可以根据varyby选项执行此操作
  • 对象缓存如何使用Insert()响应登录用户或匿名用户
  • 编辑: 我正在缓存多个东西。。。。我真的很震惊,在提到缓存时该做什么选择。Cache.Insert是否可以根据参数进行更改


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

    您可以使用以下命令从输出缓存中删除项目

    HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
    
    现在,这只会让你得到你想要的一部分。这将删除该特定页面的所有缓存项。文档证实了这种行为

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


    现在我还要更详细地了解一下您正在做什么,只缓存实际数据,然后添加/删除特定项可能是有意义的。但是,如果您的.control确实需要大量CPU等来处理显示,则输出缓存的想法是可行的。

    使用System.Web.Caching.cache类,您可以缓存项并为缓存中的项创建依赖项。如果您使用的是SQL server,则可以使用该类根据数据库清除缓存中的项


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

    你到底在缓存什么?看起来您正在进行某种数据缓存,这与页面缓存(varyByParam就是这样)有很大不同。它真的很整洁,我的页面会无限期地缓存,直到我指定的表发生更改。