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

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

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

在网站项目中,我想将其定义为共享对象,在 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)函数可以完成这项工作:

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

问题是,这对于网络应用程序来说是线程安全的吗?

最佳答案

是的,这样做是非常安全的。取自MSDN :

Thread Safety

The Regex class is immutable (read-only) and thread safe. Regex objects can be created on any thread and shared between threads

关于ASP.NET:使用应用程序范围的 Regex 对象安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8299422/

相关文章:

asp.net - 如何加密 ASP.NET 4.0 Web.Config?

c# - 在代码隐藏中设置 Eval

.net - 为什么我得到 : "iteration variable in a lambda expression may have unexpected results"

javascript - 将输入字段添加在一起并显示在标签中

javascript - 使用 jquery 验证文本框

c# - 如何从 ASP.Net 中的基类访问 session 变量?

MySQL REGEX 表示一个换行符

正则表达式替换以更改句子中的单词顺序

Python 正则表达式和 @username 的处理

asp.net - 合并 Word 文档(Office Interop 和 .NET),保持格式