Что лучше: кеширование через HttpContext.Current.Cache или просто статика?
Прошлой ночью я написал свой первый IHttpModule
сделать некоторую обработку запроса. Я использую регулярное выражение для проверки необработанного URL. IHttpModule
будет вызываться при каждом запросе, поэтому представляется разумным выполнить какое-либо кэширование объекта регулярного выражения, чтобы предотвратить его создание при каждом запросе.
Теперь мой вопрос... что лучше: используйте HttpContext.Current.Cache
хранить экземпляр объекта или использовать private static Regex
в моем модуле?
Я с нетерпением жду причин, почему. Просто чтобы уточнить: регулярное выражение никогда не изменится и, следовательно, всегда будет одним и тем же.
3 ответа
Если регулярное выражение не собирается меняться (и обычно это не так), то:
private static readonly Regex pattern = new Regex("...", RegexOptions.Compiled);
самый быстрый и самый эффективный во всех отношениях
Я думаю, это зависит Встроенный кеш может предложить вам автоматический контроль срока действия, в то время как статические объекты не могут. Кроме того, если вы хотите изменить механизм кэширования (скажем, вам нужно распространять свое приложение), вы можете сделать это с помощью встроенного кэша. Статические объекты - это просто статичные объекты.
Я бы, как правило, использовал статическое поле и сохранял кэширование, когда вам нужно больше контроля над временем жизни объекта. Вот две причины, о которых я могу думать прямо сейчас:
- Всегда есть некоторые накладные расходы, связанные с кэшированием объекта и извлечением его из кэша, по крайней мере, будет происходить упаковка / распаковка
- Вам придется обращаться к элементу по кеш-ключу, а не напрямую в коде, это делает приложение несколько громоздким и более сложным для понимания
Вы должны спросить себя, нужны ли вам функции, которые вы получаете, кэшируя объект, то есть время жизни.