【问题标题】:Clear cache in SqlDataSource清除 SqlDataSource 中的缓存
【发布时间】:2010-10-30 12:12:32
【问题描述】:

我需要手动清除启用缓存的 SqlDataSource 上的缓存。我尝试设置 EnableChaching = false 和 CacheDuration = 0(以及 = 1),但似乎没有一个会使缓存中的内容过期 - 尽管它们似乎确实阻止了新的 SELECT 被缓存。

如何手动使缓存过期?

谢谢。

【问题讨论】:

    标签: c# .net caching sqldatasource


    【解决方案1】:

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

    Simple way to invalidate SqlDataSource cache programmatically

    <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;
    

    【讨论】:

    • 仅供参考,这个解决方案被我用于我现在正在生产中并且效果很好的项目。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 一旦我将这些设置为这种情况,并执行另一个 Select(),它会清除我正在执行的查询的缓存,但保留 CommandText、CommandParameters 等的所有其他排列. 我该如何清除这些?
      【解决方案4】:

      我遇到了同样的问题,虽然“EnableCaching=false”。
      在重负载下,我看到发生了一些缓存。这种缓存导致我错过了很多数据。
      我发现它可能与缓存有关。
      所以我在我的代码后面使用Response.Cache.SetCacheability(HttpCacheability.NoCache);。它似乎有效,12 小时后我没有丢失最少的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        • 2011-07-25
        • 2017-04-06
        相关资源
        最近更新 更多