программно управляйте кэшированием вывода - отключают или включают кэш согласно значению параметра

Если вы используете pyenv, вы можете удалить вашу виртуальную среду:

$ pyenv virtualenv-delete <name>
20
задан Cœur 26 April 2017 в 17:14
поделиться

3 ответа

Вместо того, чтобы использовать директиву OutputCache, вы можете сделать то же самое программное обеспечение, следующим образом:

if (yourArbitraryCondition) {
  OutputCacheParameters outputCacheSettings = new OutputCacheParameters();
  outputCacheSettings.Duration = 60;
  InitOutputCache(outputCacheSettings);
}

Делать это от Oninit, должно работать нормально. И, очевидно, вы можете настроить поведение кэширования, установив различные свойства на выводе, который имеет все те же регуляторы, что и директива (на самом деле, вот что мы генерируем при использовании Директивы).

Основная точка заключается в том, что вы выполняете только эту логику условно, в то время как Директива делает его безусловным.

Обновление:

в качестве альтернативы, вы можете использовать API кэш-памяти низкого уровня, включенный выше код. например

HttpCachePolicy cache = Response.Cache;
cache.SetCacheability(HttpCacheability.Public);
cache.SetExpires(Context.Timestamp.AddSeconds(60));
cache.VaryByParams["categoryName"] = true;

В принципе, это еще один способ сделать то же самое, без использования мерзких API, как «не следует называться». В конце концов, в любом случае будет работать, поэтому возьмите ваш выбор.

31
ответ дан 29 November 2019 в 23:48
поделиться

Я думаю, вы сможете использовать директиву OutputCache со свойством VaryByParam, установленным на список строк, разделенных точкой с запятой, используемых для изменения кэша вывода.

Если вы не хотели просто кэшировать только , когда Page == 1?

0
ответ дан 29 November 2019 в 23:48
поделиться

редактирование: Мне нравится ответ Дэвида Эббо намного больше, чем мой собственный.


Вы можете использовать

<%@ OutputCache Duration="60"  VaryByParam="none" VaryByCustom="pageOne" %>

и реализовать его таким образом, чтобы возвращать фиксированную клавишу для первой страницы и случайную клавишу для всех остальных страниц. Вы можете (и should) позволить механизму scavenging позаботиться о памяти, но вы можете использовать HttpResponse.RemoveOutputCacheItem для удаления элементов кэша, если нужно.

public override string GetVaryByCustomString(HttpContext ctx, string custom)
{
    if(custom == "pageOne")
    {
        if(ctx.Request["page"] == "1")
        {
            return "1";
        }

        HttpResponse.RemoveOutputCacheItem("/Default.aspx");
        return Guid.NewGuid().ToString();
    }
    return base.GetVaryByCustomString(ctx, custom);
}
5
ответ дан 29 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: