根据您提供的测试数据,在特定的测试场景下,.NET 10 的正则性能表现非常出色,尤其是在使用了GeneratedRegex时。以下是具体的性能水平分析:
1. 特定场景下的顶尖表现在您使用TSLA.*?这一正则表达式、1GB 合成数据集以及特定的命中比例和行长度分布下,.NET 10 的GeneratedRegex是本轮测试中最快的实现。
2. 与其他主流实现的对比
对比 Go、Python、C++ (MSVC):.NET 10 的GeneratedRegex性能优于这些语言的实现。
对比 PCRE2 JIT:在这个测试用例中,.NET 10 击败了 PCRE2 JIT。这可能与该特定的 pattern 和数据刚好不在 PCRE2 JIT 最擅长的区间有关。
对比 C++ (MinGW/libstdc++):MinGW 的std::regex在该测试中表现极慢(1GB 单轮耗时 26 秒多),.NET 10 的性能远超于此。
3. 不同正则选项的性能差异
GeneratedRegex:表现最佳,是本次测试的最快实现。
RegexOptions.Compiled:耗时 171.583 ms。虽然性能依然强劲https://www.kuazhi.com/,但不再是“无脑开启”的性能开关,很多时候应优先考虑GeneratedRegex。
NonBacktracking:耗时 219.780 ms,比普通 .NET Regex 还要慢一些。它的核心优势在于避免灾难性回溯、提供更稳定的线性行为,而不是承诺所有正则都更快。
4. 性能评估的客观局限性需要注意的是,这个测试结果具有特定的前提条件。如果更换正则表达式(例如复杂的捕获、lookaround、大量失败回溯)、更换数据集或改变编码与命中分布,各语言的排名都可能发生变化。
总体而言,.NET 10 的正则引擎经过底层运行时的持续优化,在当前的正则性能对比中已经是一个非常能打的选手。
你测的是哪种匹配场景?是单次匹配、批量匹配,还是流式匹配?不同场景下各语言的优劣势会明显不同。