HttpContext. Истечение кэша

1113 Слишком много, чтобы назвать их всех. Некоторые из них специфичны для C; некоторые из них являются общими вещами наилучшей практики.

  • Научитесь использовать доступные инструменты
    • Система контроля версий. Каждый раз, когда это работает, проверяйте это.
    • Инструменты Diff: diff, rdiff, meld, kdiff3 и т. Д. Особенно в сочетании с RCS.
    • Опции компилятора. -Wextra -Wall __attribute __ ((выровненный (8))), как упаковать структуры.
    • make: Создание отладочной и рабочей версий.
    • Отладчик: Как получить и интерпретировать трассировку стека. Как установить точки останова. Как перешагнуть / перебрать код.
    • Редактор: компиляция в редакторе. Откройте несколько окон, M-x tags-query-replace (мои корни emacs отображаются?) И т. Д.
    • cscope, kscope, [ce] тэги или другие инструменты просмотра источников
  • Программировать в обороне. assert (foo! = NULL) в -DDEBUG; очистить пользовательский ввод.
  • Остановка и загорание при обнаружении ошибки. Отладка становится проще, когда вы дампите две строки после обнаружения проблемы.
  • Поддерживать компиляцию с 0 предупреждениями с включенными -Wextra и -Wall.
  • Не кладите все в 1 огромный .c файл.
  • Тест. Тестовое задание. И проверить еще. И проверьте эти тесты рядом с вашим источником. Потому что инструктор может вернуться и изменить требования после того, как он был сдан один раз.
33
задан Micah 11 June 2009 в 21:12
поделиться

3 ответа

Вы можете указать его в 4-м параметре Cache.Add () :

public Object Add(
    string key,
    Object value,
    CacheDependency dependencies,
    DateTime absoluteExpiration,  // After this DateTime, it will be removed from the cache
    TimeSpan slidingExpiration,
    CacheItemPriority priority,
    CacheItemRemovedCallback onRemoveCallback
)

Изменить:

Если вы обращаетесь к кешу через индексатор (т.е. Cache ["Key"] ), вызываемый метод не имеет срока действия и остается в кеше неопределенное время.

Вот код, который вызывается при использовании индексатора:

public void Insert(string key, object value)
{
    this._cacheInternal.DoInsert(true, key, value, null, NoAbsoluteExpiration, NoSlidingExpiration, CacheItemPriority.Normal, null, true);
}
33
ответ дан 27 November 2019 в 18:21
поделиться

Используйте метод Cache.Add, например: -

 HttpContext.Cache.Add("mykey", someObj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 15, 0), CacheItemPriority.Normal, null);

Срок действия указанного выше истекает через 15 минут после последнего обращения к нему. В качестве альтернативы вы можете передать Cache.NoSlidingExpiration этому параметру и использовать конкретный DateTime в предыдущем параметре.

17
ответ дан 27 November 2019 в 18:21
поделиться

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

Кэш - это просто кеш, и его цель - ускорить работу. Так что не следует ожидать, что он будет хранить ваши данные, и всегда быть готовым получить их, если их там нет.

Как вы, вероятно, знаете, у вас могут быть зависимости для элементов, и они истекают в зависимости от этого, даже если время не истек. Это простая концепция, но есть и другая, не такая простая. Приоритет.

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

РЕДАКТИРОВАТЬ: Ну, я забыл указать фактический способ действительно храните элемент в течение необходимого времени, и это результат выбора желаемого срока действия, основанного на времени, без каких-либо зависимостей, без его ручного удаления и использования приоритета NotRemovable. Таким же образом внутреннее состояние сеанса inproc хранится в кэше httpruntime.

Это продукт выбора желаемого срока действия, основанного на времени, без зависимости, без ручного удаления и использования приоритета NotRemovable. Таким же образом внутрипроцессное состояние сеанса хранится в кэше httpruntime.

Это продукт выбора желаемого срока действия, основанного на времени, без зависимости, без ручного удаления и использования приоритета NotRemovable. Таким же образом внутреннее состояние сеанса inproc хранится в кэше httpruntime.

4
ответ дан 27 November 2019 в 18:21
поделиться
Другие вопросы по тегам:

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