5

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

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

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

4

3 回答 3

11

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

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

在各方面都是最快和最有效的

于 2011-03-28T21:27:09.530 回答
3

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

于 2011-03-28T21:28:23.903 回答
3

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

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

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

于 2011-03-28T21:39:17.817 回答