相关疑难解决方法(0)

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

我有以下正则表达式:

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

它运行超过1000个字符串(IsMatch调用).在.NET Core 2.0中它需要10ms.迁移到.NET Core 2.1后,它将接管2 seconds相同的数据.

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

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

更新:BenchmarkDotNet

可重复3次降(只运行,改netcoreapp2.1netcoreapp2.0csproj文件中,再次运行). https://github.com/ptupitsyn/netcore2.1-regex-perf/tree/master/src

  • 尽可能简化实际应用程序可以减少掉落,但仍然非常明显.
  • 翻转嵌套循环会将GetPackageInfos2perf降低仅降低25%,但它仍然存在.在真实世界的代码中更改它并非易事,我想避免这种重构.
  • 在循环中执行了多个RegEx,并且我无法仅使用一个RegEx重现丢弃

更新2

删除RegexOptions.Compiled解决了问题!

c# regex .net-core

17
推荐指数
1
解决办法
1068
查看次数

标签 统计

.net-core ×1

c# ×1

regex ×1