NET 10 的正则性能现在什么水平?我拿它和 Go、Python、C++、PCRE2 测了一轮

发布时间:2026/7/21 22:54:52

NET 10 的正则性能现在什么水平?我拿它和 Go、Python、C++、PCRE2 测了一轮
为什么不用原文数据原文最大的问题不是代码写得怎样而是测试数据没有给。正则性能很吃输入分布。比如每行有多长命中比例是多少TSLA 出现在行首还是行尾不命中的行是不是有很多“差一点命中”的内容引号和转义字符有多少.*? 中间到底要跨多少字符这些东西一变结果就可能变。所以我没有试图“复现原文结果”。原文数据不公开就没法严肃复现。我这里做的是另一件事用公开、确定性的规则合成一份数据然后把所有代码放出来让别人可以重新跑。数据生成脚本在仓库里规则很简单生成约 1GB 的文本文件每行是一个 JSON string literalJSON string 里面再放一个紧凑 JSON object每 20 行放一条 TSLA也就是大约 5% 命中固定随机种子确保别人生成出来的数据一致实际这次生成的数据是bytes: 1,073,741,855lines: 4,624,532expected matches: 231,227pattern: “TSLA.*?”seed: 20260702所有实现都先把文件读进内存然后只统计内存中扫描匹配的时间。读取时间也记录了但不参与排序。测了哪些实现这次一共测了 10 个case 说明MSVC std::regex Visual Studio 18 / MSVC STLMinGW std::regex GCC 16.1.0 / libstdcPCRE2 vcpkg PCRE2 10.47PCRE2 JIT 显式 pcre2_jit_matchPython re Python 3.12.4Go regexp Go 1.26.2.NET Regex 普通 Regex构造一次复用.NET Compiled RegexOptions.Compiled构造一次复用.NET GeneratedRegex source generator 生成的正则.NET NonBacktracking RegexOptions.NonBacktracking这里有个小点要说明普通 new Regex(…) 不是每行都 new 一次而是构造一次后复用。每行都 new 那属于测错误用法不是正常业务热路径。.NET 这边大概是这样private const string Pattern “\“TSLA.*?\””;private static readonly Regex PlainRegex new(Pattern, RegexOptions.CultureInvariant);private static readonly Regex CompiledRegex new(Pattern, RegexOptions.CultureInvariant | RegexOptions.Compiled);private static readonly Regex NonBacktrackingRegex new(Pattern, RegexOptions.CultureInvariant | RegexOptions.NonBacktracking);[GeneratedRegex(Pattern, RegexOptions.CultureInvariant)]private static partial Regex InfoLineRegex();核心循环也没什么花活private static long MatchLines(string[] lines, Regex regex){long matches 0;foreach (var line in lines){if (regex.IsMatch(line)){matches;}}return matches;}C 的 PCRE2 JIT 也不是“编译了 JIT 然后还调用普通 match”这种模糊写法而是明确调用 pcre2_jit_match。完整代码直接看 GitHub 就行这里不贴一大坨了。结果每个 casewarmup 1 次正式跑 3 次只统计扫描匹配时间所有 case 匹配数都必须等于 231,227结果如下按平均耗时排序排名 实现 平均单轮扫描1 .NET GeneratedRegex 125.566 ms2 .NET Regex 170.996 ms3 .NET RegexOptions.Compiled 171.583 ms4 .NET RegexOptions.NonBacktracking 219.780 ms5 Go regexp 303.017 ms6 MSVC std::regex 448.698 ms7 PCRE2 JIT 612.498 ms8 Python re 894.424 ms9 PCRE2 5,191.270 ms10 MinGW/libstdc std::regex 26,272.900 ms.NET GeneratedRegex 三轮分别是125.294 ms125.734 ms125.669 ms这个波动很小所以至少在这份数据上不像是偶然抖出来的。另外我一开始也跑过 1MB 的小数据那个时候 .NET 没这么明显的优势。这个也正常1MB 太小了JIT、tiered compilation、缓存状态、计时噪声都能影响结果。到了 1GB 之后差距就稳定多了。有几个结果挺有意思第一.NET GeneratedRegex 真的很猛。这个结果对我来说有点爽但不是完全意外。现在的 .NET Regex 对这类模式优化得确实很激进source generator 又能把一些工作提前到编译期。这个 pattern 本身也简单本质上更接近“找一个固定前缀然后扫到后面的引号”。第二RegexOptions.Compiled 这次没赢普通 Regex。两者基本持平普通 Regex 还略快一点点.NET Regex: 170.996 ms.NET RegexOptions.Compiled: 171.583 ms所以现在写 .NET别再机械地觉得 Compiled 一定更快。很多时候你真正应该先考虑的是 [GeneratedRegex]。Compiled 不是不能用而是别把它当成无脑性能开关。第三NonBacktracking 也不等于更快。这次它是 219.780 ms比普通 .NET Regex 慢一些。NonBacktracking 的重点是避免灾难性回溯、提供更稳的线性行为不是承诺所有正则都更快。第四PCRE2 JIT 这次没有赢。这和很多人的直觉可能不一样。PCRE2 JIT 很强但不是每个 pattern、每份数据都会碾压。这个 case 里 .NET 的路径显然更适合。这里我也特意检查了一下免得变成“JIT 其实没开”的低级问题PCRE2 用的是 8-bit APIpcre2_compile、pcre2_jit_compile、pcre2_match_data_create_from_pattern 都在计时循环外JIT case 检查了 pcre2_jit_compile 的返回值失败会直接报错真正扫描时调用的是 pcre2_jit_match不是普通的 pcre2_match。所有实现也都是逐行 IsMatch/search不是某些实现扫全文件、某些实现逐行扫。所以 PCRE2 JIT 输给 MSVC std::regex 这件事我也觉得值得多看一眼但目前看不是因为测试代码把 JIT 写错了。更可能是这个 pattern 和这份数据刚好不在 PCRE2 JIT 最舒服的区间。第五MinGW/libstdc 的 std::regex 还是那个味。1GB 单轮 26 秒多。这个结果非常突出突出到我都检查了好几遍匹配数。最后所有实现匹配数一致所以至少这个 case 下它确实很慢。怎么复现仓库

相关新闻

平顶山医院慧眼识珠:复购10Kg黑豆泡泡米,要求基料用黑米换掉玉米

平顶山医院慧眼识珠:复购10Kg黑豆泡泡米,要求基料用黑米换掉玉米

2026/7/21 20:03:24

2026年6月中旬,河南平顶山郏县瑞媛堂中医院院长王约瑟一行考察武汉知医邦,当即下单代工10公斤黑豆泡泡米。收到成品后,王院长十分满意,迅速决定复购10公斤,同时提出一个改进要求:将原配方中的基料玉米全部替…

2026企业AI原生发展路径详解

2026企业AI原生发展路径详解

2026/7/20 16:06:12

历经两年的技术狂欢与概念祛魅,2026年的企业数字化转型已然告别野蛮生长的探索期,迈入泾渭分明的分化分水岭。回望过去,国内绝大多数企业的AI落地始终停留在“外挂赋能”的浅层阶段,将人工智能视作优化局部工作的效率工具&#xf…

3分钟快速上手:无需Root的安卓投屏神器scrcpy完全指南

3分钟快速上手:无需Root的安卓投屏神器scrcpy完全指南

2026/7/21 19:59:50

3分钟快速上手:无需Root的安卓投屏神器scrcpy完全指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 还在为手机屏幕太小而烦恼吗?想要在电脑大屏上流畅操作安卓手…

UE5新手避坑指南:Enhanced Input系统实现角色移动与视角控制

UE5新手避坑指南:Enhanced Input系统实现角色移动与视角控制

2026/7/21 22:48:05

1. 项目概述:为什么新手需要这份“避坑指南”?刚接触虚幻引擎5(UE5)的新手,尤其是从Unity或其他引擎转过来的朋友,常常会卡在人物移动和视角控制这个看似基础,实则暗藏玄关的环节上。你可能会发…

记录我的C语言编程笔记(1~15)

记录我的C语言编程笔记(1~15)

2026/7/21 22:48:05

Hello World预处理#include<stdio.h> //stantardInputandOutput标准的输入和输出业务代码&#xff0c;你要让计算机做的事情int main(){ //程序的主入口&#xff0c;“int”表示结果为整数printf("Hello World…

2026云手机排名实测!四款热门云手机哪家好用?

2026云手机排名实测!四款热门云手机哪家好用?

2026/7/21 22:48:05

很多人挑云手机完全靠瞎选&#xff0c;要么挂机老掉线&#xff0c;要么功能太少不好用&#xff0c;要么暗藏收费坑。今天不搞复杂专业测评&#xff0c;用最直白的真实体验&#xff0c;横向对比多多云、红手指、繁星云、桃心云四款目前最火的云手机&#xff0c;从大家最关心的稳…

高考成绩分段统计表解读与志愿填报技巧

高考成绩分段统计表解读与志愿填报技巧

2026/7/21 22:48:05

1. 高考成绩分段统计表的重要性与解读方法每年高考成绩公布后&#xff0c;各省教育考试院都会发布成绩分段统计表&#xff08;俗称"一分一段表"&#xff09;&#xff0c;这份表格对考生志愿填报具有决定性指导作用。以四川省2026年历史类成绩分段表为例&#xff0c;我…

智慧校园系统多少钱一套?一文读懂定价逻辑与选型指南

智慧校园系统多少钱一套?一文读懂定价逻辑与选型指南

2026/7/21 22:48:05

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

Moltbook:面向AI智能体的去中心化知识协作网络

Moltbook:面向AI智能体的去中心化知识协作网络

2026/7/21 22:38:02

1. 项目概述&#xff1a;当社交网络不再需要人类登录 你有没有想过&#xff0c;一个社交平台上线后&#xff0c;它的首批用户里没有一个人类&#xff1f;不是测试账号&#xff0c;不是运营小号&#xff0c;而是从第一天起&#xff0c;所有注册、发帖、评论、点赞、拉群、吵架、…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/21 5:45:57

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/21 9:56:14

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵&#xff08;连锁便利店/商超标准配置&#xff09; 自助收银Kiosk一体机&#xff1a;顾客结算、自助核销优惠券、商品素材预览&#xff1b;运营折叠平板&#xff1a;店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/21 3:09:32

1 和小红书类似&#xff0c;可以采用类似判断方法------------其实他比小红书好判断&#xff0c;因为他没有图片&#xff0c;控件位置几乎是固定的&#xff0c;都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的&#xff0c;所以我就…

GraphRAG Local + Ollama:微软知识图谱本地化

GraphRAG Local + Ollama:微软知识图谱本地化

2026/7/21 0:06:35

普通 RAG 有个老毛病&#xff1a;你问它「这堆文档整体在讲什么」&#xff0c;它答不上来。因为它只会把问题切成向量&#xff0c;去几十个文本块里捞最相似的几段拼给模型看。可「整体讲什么」这种问题&#xff0c;答案根本不在任何单独一段里——它散在全篇的联系里。 微软的…

AI 数据产品化思考:让分析能力变成可售卖的数据服务

AI 数据产品化思考:让分析能力变成可售卖的数据服务

2026/7/21 0:06:35

AI 数据产品化思考&#xff1a;让分析能力变成可售卖的数据服务 大家好&#xff0c;我是朱大喜。这周一直在复盘具体的项目和技术&#xff0c;最后一篇聊点不一样的东西——数据产品化。做了这么多年数据分析&#xff0c;我发现一个规律&#xff1a;能卖出去的从来不是"分…

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

2026/7/21 0:06:35

本文完整呈现了企业级 AI Coding 落地的核心方法论&#xff1a;从 Harness 工程的微观/宏观定义&#xff0c;到 Loop 工程的六大构建模块&#xff0c;再到基于 SDD&#xff08;规范驱动开发&#xff09;的工程化落地路径。干货较多&#xff0c;建议收藏细读。 我从 22 年开始就…