Pav*_*syn 17 c# regex .net-core
我有以下正则表达式:
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.1以netcoreapp2.0在csproj文件中,再次运行).
https://github.com/ptupitsyn/netcore2.1-regex-perf/tree/master/src
GetPackageInfos2perf降低仅降低25%,但它仍然存在.在真实世界的代码中更改它并非易事,我想避免这种重构.更新2
删除RegexOptions.Compiled解决了问题!
RegexOptions.Compiled是没有实现在.NET 2.0的核心,而实现在.NET 2.1的核心.
编译涉及初始开销,对于某些使用模式,此开销超过编译正则表达式的收益.
我的情况有些复杂,似乎.NET中可能存在错误,因为即使使用适当的基准测试(预热),Compiled模式也会变慢.详见Corefx问题:https://github.com/dotnet/corefx/issues/30131
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |