Очистить кеш в SqlDataSource

Мне нужно вручную очистить кеш в SqlDataSource с включенным кешированием. Я попытался установить EnableChaching = false и CacheDuration = 0 (а также = 1), и ни один из них, похоже, не истекает сроком действия содержимого, уже находящегося в кеше, хотя они, похоже, предотвращают кэширование новых SELECT.

Как вручную истечь срок действия этого кеша?

Спасибо.


person azollman    schedule 01.06.2009    source источник


Ответы (4)


Я только начал исследовать это сегодня и наткнулся на этот пост, это похоже на лучшее решение:

Простой способ программно аннулировать кеш 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;
person Chris Marisic    schedule 09.11.2009
comment
К вашему сведению, это решение было использовано мной для моего проекта, который сейчас находится в производстве и отлично работает. - person Chris Marisic; 26.02.2010

Отключение кэширования (EnableCaching = false), а затем принудительное новое выделение (SqlDataSourceInstance.Select(new DataSourceSelectArguments())) перед повторным включением кэширования очищает конкретную комбинацию выбранных CommandText и CommandParameters, так что это начало.

Однако он по-прежнему сохраняет кеш других комбинаций запросов, выполняемых SqlDataSource, поэтому это не решает всей проблемы.

person azollman    schedule 01.06.2009

Убедитесь, что ваша CacheExpirationPolicy имеет значение Absolute. Используйте ненулевое значение CacheDuration (0 означает бесконечную продолжительность кэширования).

person Shea    schedule 01.06.2009
comment
После того, как я установил это так, и я выполняю другой Select(), он очищает кеш запроса, который я выполняю, но сохраняет все другие перестановки CommandText, CommandParameters и т. д. Как мне их очистить? ? - person azollman; 02.06.2009

У меня была та же проблема, хотя EnableCaching=false.
При большой нагрузке я заметил, что происходит кэширование. Из-за этого кэширования я пропустил много данных.
Я обнаружил, что это может быть связано с кэшированием.
Поэтому я использую Response.Cache.SetCacheability(HttpCacheability.NoCache); в своем коде. Кажется, это работает, и через 12 часов у меня нет ни малейших недостающих данных.

person Hassan    schedule 07.12.2020