gpt4 book ai didi

c# - .NET Core 2.1 - 循环中的正则表达式比 2.0 慢 200 倍(简单基准测试中为 3 倍)

转载 作者:可可西里 更新时间:2023-11-01 03:02:00 24 4
gpt4 key购买 nike

我有以下正则表达式:

    var regex = new Regex(
@"^ActiveMQ[\d\.-]*$",
RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);

它运行超过 1000 个字符串(IsMatch 调用)。在 .NET Core 2.0 中,它大约需要 10ms。迁移到 .NET Core 2.1 后,它会在 2 秒 上处理相同的数据。

知道发生了什么事吗? 2.1 中有任何行为变化吗?

======================

更新:BenchmarkDotNet

可重现的 3 倍下降(只需运行,将 csproj 文件中的 netcoreapp2.1 更改为 netcoreapp2.0,再次运行)。 https://github.com/ptupitsyn/netcore2.1-regex-perf/tree/master/src

  • 尽可能简化实际应用已经减少了下降,但它仍然非常明显。
  • 翻转 GetPackageInfos2 中的嵌套循环可将性能下降降至仅 25%,但它仍然存在。在实际代码中对此进行更改并非易事,我想避免这种重构。
  • 循环中执行了多个 RegEx,我无法仅用一个 RegEx 重现 drop

更新 2

删除 RegexOptions.Compiled 即可解决问题!

最佳答案

RegexOptions.Compiled 在 .NET Core 2.0 中未实现,但在 .NET Core 2.1 中实现

编译涉及初始开销,对于某些使用模式,此开销超过编译正则表达式的 yield 。

我的情况有点复杂,似乎 .NET 中可能存在错误,因为即使有适当的基准测试(预热),Compiled 模式也较慢。请参阅 Corefx 问题中的详细信息:https://github.com/dotnet/corefx/issues/30131

关于c# - .NET Core 2.1 - 循环中的正则表达式比 2.0 慢 200 倍(简单基准测试中为 3 倍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50678580/

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