gpt4 book ai didi

c# - Windows Server 2008 上的正则表达式速度慢

转载 作者:太空狗 更新时间:2023-10-29 22:35:17 26 4
gpt4 key购买 nike

我的正则表达式在 Windows Server 2008 上的编译速度非常慢。我编写了一个小型控制台应用程序来强调这个问题。该应用程序生成自己的输入并从 XML 文件中的单词构建正则表达式。我构建了这个应用程序的发布版本,并在我的个人笔记本电脑(运行 XP)和 Windows 2008 服务器上运行它。正则表达式在我的笔记本电脑上编译需要 0.21 秒,但在服务器上编译需要 23 秒。

知道是什么原因造成的吗?问题仅在首次使用 Regex 时出现(首次编译时 - 此后就可以了)

我还发现了另一个问题 - 当在同一个 Windows 2008 服务器上的正则表达式中使用 \s+ 时,内存气球(使用 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 - time).TotalSeconds);
Console.ReadKey();

这导致在我的笔记本电脑上花费 0.21 秒,在 2008 服务器上花费 23 秒。XML 文件包含 168 个单词,格式如下:

<word text="test" />

最佳答案

我找到了一个解决方案,虽然不是正确的,但对我来说是完美的。出于某种原因,如果我省略 RegexOptions.Compiled 标志,Regex 会快得多。我什至设法在 2008 年服务器上在 65 毫秒内对 100 个长短语执行 Regex

这一定是 .net 库中的错误,因为未编译版本应该比编译版本慢得多。无论哪种方式,每次检查不到 1 毫秒对我来说是非常可以接受的:)

关于c# - Windows Server 2008 上的正则表达式速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1491164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com