更好的是:通过HttpContext.Current.Cache缓存还是只是静态?

时间:2011-03-28 21:23:39

标签: c# asp.net asp.net-mvc ihttpmodule

昨晚我写了第一个IHttpModule来做一些请求处理。我正在使用正则表达式来检查原始URL。每个请求都会调用IHttpModule,因此对正则表达式对象进行某种缓存似乎是合理的,以防止在每个请求中创建它。

现在我的问题......什么是更好的:使用HttpContext.Current.Cache存储实例化对象或在我的模块中使用private static Regex

我期待着原因。只是为了澄清:正则表达式永远不会改变,因此永远都是一样的。

3 个答案:

答案 0 :(得分:11)

如果正则表达式不会改变(通常不会改变),那么:

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

是各方面最快,最有效的

答案 1 :(得分:3)

我想这取决于。内置缓存可以为您提供自动过期控制,而静态对象则不能。此外,如果您想更改缓存机制(假设您必须分发您的应用程序),您可以使用内置缓存。静态对象就是它,静态。

答案 2 :(得分:3)

我通常使用静态字段并在需要更多控制对象生命周期时保存缓存。以下是我可以想到的两个原因:

  • 缓存对象并从缓存中检索它总是有一些开销,至少会有装箱/拆箱
  • 您必须通过缓存键而不是直接在代码中访问该项目,这会使应用程序更笨重且更难理解

您应该问自己,是否需要通过缓存对象获得的功能,即生命周期。