.NET 10 正则性能评测:与 Go、C++、PCRE2 及 Python 的横向对比

根据您提供的测试数据,在特定的测试场景下,.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 的正则引擎经过底层运行时的持续优化,在当前的正则性能对比中已经是一个非常能打的选手。

你测的是哪种匹配场景?是单次匹配、批量匹配,还是流式匹配?不同场景下各语言的优劣势会明显不同。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容