我需要手动清除启用了缓存的 SqlDataSource 的缓存。我已经尝试过将 EnableCaching 设为 false,并将 CacheDuration 设为 0(或者设为 1),但似乎都无法使已经缓存的内容过期,尽管它们似乎可以防止新的 SELECT 被缓存。
那么,如何手动使缓存失效呢?
谢谢。
我需要手动清除启用了缓存的 SqlDataSource 的缓存。我已经尝试过将 EnableCaching 设为 false,并将 CacheDuration 设为 0(或者设为 1),但似乎都无法使已经缓存的内容过期,尽管它们似乎可以防止新的 SELECT 被缓存。
那么,如何手动使缓存失效呢?
谢谢。
我今天刚开始研究这个问题,看到了这篇帖子,它似乎是最好的解决方案:
<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个小时后我没有少量丢失的数据。