采取以下作为ASP.NET HttpModule组成部分的类(并据我所知,正则表达式和html,不过我没有选择):
sealed internal class RegexUtility
{
public static Regex RadioButton { get; private set; }
static RegexUtility()
{
RadioButton = new Regex(@"<input.*type=.?radio.*?>", RegexOptions.Compiled);
}
}
我担心此代码的线程安全性。由于正则表达式是只读的,我知道一旦将其保存在内存中就不必担心修改。我担心实例化本身,但是我应该将其锁定在构造函数中吗?有根据的猜测表明,以下代码将是线程安全的。我的想法是,两个线程可能会尝试同时实例化它,因此需要锁定。但是,由于这是静态的,并且据我所知,IIS应用程序池中只有一个应用程序实例(对吗?),那么也许这不是我需要担心的事情。
sealed internal class RegexUtility
{
public static Lazy<Regex> RadioButton { get; private set; }
static RegexUtility()
{
RadioButton = new Lazy<Regex>(() => new Regex(@"<input.*type=.?radio.*?>", RegexOptions.Compiled));
}
}
有人会为我提供更多知识的亮点吗?
在静态构造函数是保证只运行一次,所以你的第一个片段应该罚款。
根据ECMA C#Spec第17.11节:
非泛型类的静态构造函数在给定的应用程序域中最多执行一次。泛型类声明的静态构造函数对于从类声明构造的每个封闭构造类型最多执行一次。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句