我需要在启用缓存的情况下手动清除 SqlDataSource 上的缓存。我尝试设置 EnableChaching = false 和 CacheDuration = 0(以及 = 1),但似乎没有一个会使缓存中的内容过期 - 尽管它们似乎确实阻止了新的 SELECT 被缓存。
如何手动使该缓存过期?
谢谢。
我需要在启用缓存的情况下手动清除 SqlDataSource 上的缓存。我尝试设置 EnableChaching = false 和 CacheDuration = 0(以及 = 1),但似乎没有一个会使缓存中的内容过期 - 尽管它们似乎确实阻止了新的 SELECT 被缓存。
如何手动使该缓存过期?
谢谢。
我今天刚开始研究这个并遇到了这篇文章,这看起来是最好的解决方案:
以编程方式使 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;
禁用缓存 (EnableCaching = false),然后在重新启用缓存之前强制执行新的选择 (SqlDataSourceInstance.Select(new DataSourceSelectArguments())) 会清除选中的 CommandText 和 CommandParameters 的特定组合,因此这是一个开始。
但是,它仍然保留由 SqlDataSource 执行的其他查询组合的缓存,因此这并不能解决所有问题。
确保您的 CacheExpirationPolicy 是绝对的。使用非零 CacheDuration(0 表示无限缓存持续时间)。
我遇到了同样的问题,尽管“EnableCaching=false”。
在重负载下,我看到发生了一些缓存。这种缓存导致我错过了很多数据。
我发现它可能与缓存有关。
所以我Response.Cache.SetCacheability(HttpCacheability.NoCache);
在我的代码后面使用。它似乎有效,12 小时后我没有丢失最少的数据。