Что лучше: кеширование через HttpContext.Current.Cache или просто статика? - PullRequest
5 голосов
/ 29 марта 2011

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

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

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

Ответы [ 3 ]

11 голосов
/ 29 марта 2011

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

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

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

3 голосов
/ 29 марта 2011

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

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

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

3 голосов
/ 29 марта 2011

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

...