问题 在SqlDataSource中清除缓存


我需要在启用了缓存的情况下手动清除SqlDataSource上的缓存。我已经尝试设置EnableChaching = false,并且CacheDuration = 0(以及= 1)并且似乎都没有使缓存中已有的内容到期 - 尽管它们似乎确实阻止了新的SELECT被缓存。

如何手动使该缓存失效?

谢谢。


12263
2018-06-01 20:13


起源



答案:


我刚刚开始研究这个并发现这篇文章,这看起来像是最好的解决方案:

以编程方式使SqlDataSource缓存无效的简单方法

<asp:SqlDataSource ID="x" EnableCaching="True" CacheKeyDependency="MyCacheDependency"/>

protected void Page_Load(object sender, EventArgs e)
{ // Or somewhere else before the DataBind() takes place
  if (!IsPostBack)
  {
      //prime initial cache key value if never initialized
      if (Cache["MyCacheDependency"] == null)
      {
        Cache["MyCacheDependency"] = DateTime.Now;
      }
  }
}


// Evict cache items with an update in dependent cache:
Cache["MyCacheDependency"] = DateTime.Now;

13
2017-11-09 20:23



仅供参考我的这个解决方案被我用于我现在正在制作的项目并且效果很好。 - Chris Marisic


答案:


我刚刚开始研究这个并发现这篇文章,这看起来像是最好的解决方案:

以编程方式使SqlDataSource缓存无效的简单方法

<asp:SqlDataSource ID="x" EnableCaching="True" CacheKeyDependency="MyCacheDependency"/>

protected void Page_Load(object sender, EventArgs e)
{ // Or somewhere else before the DataBind() takes place
  if (!IsPostBack)
  {
      //prime initial cache key value if never initialized
      if (Cache["MyCacheDependency"] == null)
      {
        Cache["MyCacheDependency"] = DateTime.Now;
      }
  }
}


// Evict cache items with an update in dependent cache:
Cache["MyCacheDependency"] = DateTime.Now;

13
2017-11-09 20:23



仅供参考我的这个解决方案被我用于我现在正在制作的项目并且效果很好。 - Chris Marisic


在重新启用高速缓存之前禁用高速缓存(EnableCaching = false)然后强制新选择(SqlDataSourceInstance.Select(new DataSourceSelectArguments()))会清除所选的CommandText和CommandParameters的特定组合,因此这是一个开始。

但它仍然保留了SqlDataSource执行的其他查询组合的缓存,因此这并不能解决所有问题。


0
2018-06-01 20:42





确保您的CacheExpirationPolicy是绝对的。使用非零CacheDuration(0表示无限缓存持续时间)。


0
2018-06-01 20:42



一旦我设置了那些,我执行另一个Select(),它清除我正在执行的查询的缓存,但保留CommandText,CommandParameters等的所有其他排列。我如何清除这些? - azollman