我的情况是我的正则表达式在Windows Server 2008上编译得非常慢.我写了一个小的控制台应用程序来强调这个问题.该应用程序生成自己的输入,并从XML文件中的单词构建一个正则表达式.我构建了这个应用程序的发布版本,并在我的个人笔记本电脑(运行XP)和Windows 2008服务器上运行它.正则表达式在我的笔记本电脑上编译需要0.21秒,但在服务器上编译需要23秒.
可能导致这种情况的任何想法?问题只出现在首次使用正则表达式时(首次编译时 - 此后它很好)
我还发现了另一个问题 - 当\s+在同一个Windows 2008服务器上使用正则表达式时,内存气球(使用4GB +)并且Regex的编译永远不会完成.
Regex和64位.net是否存在已知问题?是否有针对此的修复/补丁?我无法在网上找到任何信息,但我在Framework 2.0中找到了一些关于同样问题的文章 - 这肯定已经解决了吗?
更多信息:服务器运行64位版本的.net框架(3.5 SP1),在我的笔记本电脑上安装了Visual Studio 2008和3.5框架.正则表达式具有以下模式:^word$|^word$|^word$并使用以下标志构造:RegexOptions.IgnoreCase | RegexOptions.Compiled
这是一段代码:
StringBuilder regexString = new StringBuilder();
if (!String.IsNullOrEmpty(fileLocation))
{
XmlTextReader textReader = new XmlTextReader(fileLocation);
textReader.Read();
while (textReader.Read())
{
textReader.MoveToElement();
if (textReader.Name == "word")
{
regexString.Append("^" + textReader.GetAttribute(0) + "$|");
}
}
ProfanityFilter = new Regex(regexString.ToString(0, regexString.Length - 1), RegexOptions.IgnoreCase | RegexOptions.Compiled);
}
DateTime time = DateTime.Now;
Console.WriteLine("\nIsProfane:\n" + ProfanityFilter.IsMatch("test"));
Console.WriteLine("\nTime: " + (DateTime.Now …Run Code Online (Sandbox Code Playgroud)