在Windows 2008 r2上进行慢速正则表达式编译

时间:2016-10-04 09:18:51

标签: c# regex windows-server-2008-r2

这是Regex slow on Windows Server 2008的副本,但由于接受的答案不是真正的答案,而是一种解决方法,我正在重新提出这个问题。

以下代码:

var complex = @"^(([^<>()[\]\\.,;:\s@""]+"
    + @"(\.[^<>()[\]\\.,;:\s@""]+)*)|("".+""))@"
    + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
    + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
    + @"[a-zA-Z]{2,}))$";
var x = Stopwatch.StartNew();
var b = false;
for (var i = 0; i < 1000; i++)
{
    Regex r = new Regex(complex, RegexOptions.Compiled | RegexOptions.IgnoreCase);
    b = b || r.IsMatch("abc");
}
Console.WriteLine((Environment.Is64BitProcess ? "64-bit: " : "32-bit: ") + x.ElapsedMilliseconds);

运行于:

  • 在桌面上以32位运行时为5秒
  • 在桌面上以64位运行时为13秒
  • 在我的Windows 2008 r2服务器上以32位运行时为5秒
  • 130秒!?在我的Windows 2008 r2服务器上以64位运行时

这是在桌面和Windows 2008 r2服务器上使用.net 4.5.1。这对我来说毫无意义。世界上哪些因素会导致Windows 2008服务器出现这么慢?如何让它以64位的速度运行到我的桌面。

0 个答案:

没有答案