Что лучше: кеширование через HttpContext.Current.Cache или просто статика?

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

Теперь мой вопрос... что лучше: используйте HttpContext.Current.Cache хранить экземпляр объекта или использовать private static Regex в моем модуле?

Я с нетерпением жду причин, почему. Просто чтобы уточнить: регулярное выражение никогда не изменится и, следовательно, всегда будет одним и тем же.

3 ответа

Решение

Если регулярное выражение не собирается меняться (и обычно это не так), то:

private static readonly Regex pattern = new Regex("...", RegexOptions.Compiled);

самый быстрый и самый эффективный во всех отношениях

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

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

  • Всегда есть некоторые накладные расходы, связанные с кэшированием объекта и извлечением его из кэша, по крайней мере, будет происходить упаковка / распаковка
  • Вам придется обращаться к элементу по кеш-ключу, а не напрямую в коде, это делает приложение несколько громоздким и более сложным для понимания

Вы должны спросить себя, нужны ли вам функции, которые вы получаете, кэшируя объект, то есть время жизни.

Другие вопросы по тегам