我有一種情況,我的正則表達式在Windows Server 2008上編譯得非常慢。我編寫了一個小型控制檯應用程序來突出顯示此問題。該應用程序生成自己的輸入,並從XML文件中的單詞構建正則表達式。我構建了此應用的發佈版本,並在我的個人筆記本電腦(運行XP)和Windows 2008服務器上運行。正則表達式花了0.21秒在我的筆記本電腦上編譯,但在服務器上編譯了23秒。Windows Server 2008上的正則表達式緩慢
任何想法可能導致這種情況?這個問題只是第一次使用正則表達式(當它是第一次編譯 - 此後它很好)
我還發現了另一個問題 - 當在同一Windows 2008服務器上的正則表達式中使用\s+
時,內存氣球(使用4GB +),正則表達式的編譯永遠不會結束。
是否有正則表達式和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 - time).TotalSeconds);
Console.ReadKey();
這導致爲0.21秒的時間在我的筆記本在2008年服務器上爲23秒。 XML文件包含168個字的格式如下:
<word text="test" />
代碼示例如何處理正則表達式和xml? – 2009-09-29 12:47:25