ASP.NET:使用应用程序范围的Regex对象是否安全?

时间:2011-11-28 17:01:20

标签: asp.net regex vb.net caching thread-safety

我有一个复杂的正则表达式,用于帮助从用户输入中删除HTML。我知道.NET在某种程度上缓存了静态Regex调用,但是这个调用很大并经常使用,所以我希望它可以随意使用。

在网站项目中,我想在App_Code的帮助器类中将其定义为共享对象,例如:

App_Code中的AppHelper.vb:

Public Class AppHelper

  Private Shared _rxRemoveHTML As New Regex("(<[\s\S]*?(style|script)[\s\S]*?>[\s\S]*?</[\s\S]*?(style|script)[\s\S]*?>)|<[^<>]*>|&#[0-9a-z]+;|&#|<|>|\\|`|\t", RegexOptions.IgnoreCase + RegexOptions.Multiline)

这将使应用程序的生命保持活力。

公共职能部门负责:

Public Shared Function RemoveHTML(ByVal sIn As String) As String
  Return _rxRemoveHTML.Replace(sIn, "")
End Function

问题是,这是否是线程安全的,对于Web应用程序来说还不错?

1 个答案:

答案 0 :(得分:5)

是的,这样做是完全安全的。取自MSDN

  

线程安全

     

Regex类是不可变的(只读)和线程安全的。可以在任何线程上创建正则表达式对象并在线程之间共享