惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
Vercel News
Vercel News
Cloudbric
Cloudbric
Recent Announcements
Recent Announcements
O
OpenAI News
Y
Y Combinator Blog
Hacker News: Ask HN
Hacker News: Ask HN
I
InfoQ
WordPress大学
WordPress大学
S
Secure Thoughts
P
Proofpoint News Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
小众软件
小众软件
I
Intezer
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
GRAHAM CLULEY
P
Palo Alto Networks Blog
Attack and Defense Labs
Attack and Defense Labs
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
美团技术团队
V
Vulnerabilities – Threatpost
Scott Helme
Scott Helme
C
Check Point Blog
H
Help Net Security
博客园 - Franky
AWS News Blog
AWS News Blog
MongoDB | Blog
MongoDB | Blog
Project Zero
Project Zero
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V2EX - 技术
V2EX - 技术
Cisco Talos Blog
Cisco Talos Blog
Latest news
Latest news
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
V
V2EX
C
Cybersecurity and Infrastructure Security Agency CISA
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
N
News and Events Feed by Topic
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
Schneier on Security
Schneier on Security
PCI Perspectives
PCI Perspectives
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 张善友

本体:AI落地的"企业翻译官" C# MCP SDK 2.0 即将发布:去会话化、去握手、去运维噩梦 数字员工的成本账:OpenClaw.NET 如何用工程化实现"成功任务的单位经济学"(下) AI 成本战的隐性成本与降本五层:从"成功率悖论"到"系统复杂度"(中) 从 Token 价格战到成功任务单位经济学:AI 成本战的真正主线(上) MCP + A2A 融合:协议层已就绪,信任层才是硬仗 22年微软MVP连任:一个.NET技术人的社区长跑 OpenClaw.NET 本体工程实践(一):数字员工的「语义大脑」不是数据库 当工厂里坐满了"数字员工":AI原生时代,NPI到量产正在被重写 当 AI 对话里直接弹出业务界面:MCP Apps 正在改写 SaaS 的集成逻辑 C# vs Go:Agentic 时代的语言分层 G#:当 Go、Kotlin 与 Swift 的美学遇见 .NET 运行时 从 Bun 的 Rust 重写,看 C# 如何重建 AI 基础设施层 .NET 10 File-Based Apps:一个 .cs 文件搞定一切,C# 终于也能像 Python 一样写脚本了! 从Kaplan到Test-Time Compute:Scaling Law的真实演变与中文媒体的叙事偏差 AI 基础设施的"去 Python 化":Rust 与 C# 的两条替代路径 你的 AI Agent 会在服务器上"修仙"——OpenClaw.NET 长持久会话技术解读 当 AI 不再只是"说话":OpenClaw.NET 率先原生支持 MCP Apps Token IO 架构的设计游戏:大模型产品形态四年演进的本质 将 Rust 绑定到 .NET 10:Oxigraph 的 FFI 桥接实践 Claude Code Dynamic Workflows vs OpenClaw.NET MetaSKILL C# ?? 链式回退:编写优雅的多级兜底逻辑 MetaSKILL 与 SKILL:多视角深度综述 Microsoft Agent Framework 1.0 正式接棒,.NET AI 进入 Agent-Native 时代 从 OpenClaw.NET 的 /loop 实现,看 Loop Engineering 如何从概念走向工程实践 OpenClaw.NET 祭出 TokenJuice:Agent 时代的"Token 瘦身引擎",让 LLM 上下文不再膨胀 OpenClaw.NET 重大更新:Goal 机制登场,让 AI Agent 不再"半途而废" OpenClaw.NET MetaSKILLs 系统深度解析:AI Agent 正在学会「自己给自己写技能」 OpenClaw.NET 上线 MetaSkills :软件工程第一性原理的工业级实践 当 AgentGateway 遇上 OpenClaw.NET:企业级智能体基础设施的深度协同实战 C# 内存安全性的重大演进:重新定义 unsafe 关键字 Qt Bridges for C# 深度技术解析 OpenClaw.NET 兼容性目录指南(Compatibility Catalog) .NET 10 桌面 UI 框架的范式演进:Jalium.UI 与 MewUI 架构深度对比 架构融合:Activity Host 作为确定性编排与认知智能代理的桥梁 MewUI 项目:面向 NativeAOT 的超轻量级.NET GUI 架构、底层图形管线与性能演进 人工智能原生时代的全栈工程范式转移:DeepSeek 人才战略与下一代 Agent 基础设施深度分析 OpenClaw.NET 外部 CLI 预设系统:从零编写第三方 CLI 集成指南 曝华为"白嫖"开源团队技术方案事件——网友评论总结 NuGet下载量数据分析与.NET生态全景观察:从数据洞察技术演进 .NET 11 Preview 4 正式发布:Runtime-Async 全面启用、Process API 大幅扩展 OpenClaw.NET:给智能以形态 OpenClaw.NET 外部 CLI 连接器 (External CLI Connectors) 详细技术总结 OpenHarmony.Avalonia 归档事件对中国自主软件生态的影响--信任的坍塌与生态的异化 Memgraph 与 Neo4j 图数据库对比及 .NET 生态适配分析 .NET生态系统中的A2A(Agent-to-Agent)协议支持与跨平台多智能体协同 OpenClaw.NET .NET 原生插件开发完全指南:以 Mempalace 插件为范例 为 openclaw.net 集成 ElBruno.MempalaceNet 记忆系统 Graphify-DotNet:AI 驱动的 .NET 代码知识图谱构建工具 SonnetDB:.NET 生态下的高性能嵌入式时序数据库 C# 原生编码智能体运行时 SharpClawCode SharpIDE: 基于 .NET 与 Godot 引擎的跨平台开源 IDE SharpDbg 与 netcoredbg 深度对比分析 .NET 调试器 netcoredbg 跨平台及其 LoongArch 架构支持进展 .NET生态下Native AOT兼容的Cron任务调度框架 Avalonia UI 12.0.0 正式发布:架构演进和性能飞跃 - 张善友 DotNetPy:现代.NET 与 Python 互操作 实战指南 微软发布的《生成式人工智能初学者.NET 10第二版》课程 Avalonia UI 12.0.0-RC1正式发布 自动导引车(AGV)与自主移动机器人(AMR)控制系统的 C# 开源封装库 AgentEval:面向 .NET 生态的企业级 AI 智能体评估框架 .NET 10 打造 OpenClaw Windows Node Microsoft Agent Framework:基于 DelegatingAIAgent 与 ChatClientAgent 的核心架构和协同范式 基于 Kubernetes 与多语言 SDK 的 OpenSandbox AI 代理沙箱编排 MCP C# SDK v1.0 正式发布 .NET 11 Preview 2 架构演进、技术深度解析 基于NativeAOT的 OpenClaw.NET 深度刨析 BMAD方法 v6 与 GitHub Copilot 在应用开发中的协同 C# 驱动的开源无人机机载飞控算法 《上海市卫生健康”信息技术应用创新”白皮书》C#/.NET “A组件”认定事件始末与最终结果 .NET 11 预览版 1 中的新兴架构演进:RISC-V 与 LoongArch 支持的深度技术解析与生态展望 .NET 11 预览版1:CoreCLR 在 WebAssembly 上的全面集成与性能突破 .NET 11与智能体人工智能的范式转移:架构演进、开发者生态与安全解析 Lucia 智能家居自治系统:基于多智能体编排与边缘计算融合 Model Context Protocol (MCP) C# SDK v0.9.0-preview.1 发布
C# GeneratedRegex:面向对象语言的"底层性能突围
张善友 · 2026-07-04 · via 博客园 - 张善友

核心观点:在需要编译期代码生成、底层内存控制、向量化优化的场景中,C# 是目前唯一在语言层面、运行时层面、编译器层面同时提供完整支持的面向对象语言。


一、从一个问题开始

.NET 的 GeneratedRegex 特性,很多人以为只是"把正则表达式提前编译"那么简单。

但实际上,它是在编译期将正则表达式源码生成为专门的 C# 代码,然后作为普通 C# 代码编译进程序集。这意味着:

  • ❌ 没有运行时解释器开销
  • ✅ 获得完整的 JIT/AOT 优化
  • ✅ 生成的代码和手写代码享受同等待遇

这就引出了一个更深层的问题:当编译器替你写了底层代码,最终考验的是什么?

答案是——编译器和运行时的极限优化能力


二、性能优化的四个维度

正则表达式引擎的极致优化,需要在多个层面同时发力:

优化层级 核心技术 为什么正则需要它
SIMD 并行 Vector128/256/512<T> (AVX2/AVX-512) 同时匹配多个字符,如 IndexOfAny 的向量化实现
缓存行对齐 StructLayout + Pack 控制 状态机跳转表对齐到缓存行,减少 Cache Miss
分支预测 有序分支、条件移动 回溯/DFA 跳转的分支预测优化
零拷贝遍历 Span<T> + unsafe + ref 避免 GC 和边界检查,直接指针操作
GPU 并行 CUDA/OpenCL(理论上) 大规模文本并行匹配

这些优化能力,不是框架层面的补丁,而是语言-运行时-编译器的协同设计


三、语言层面的关键对比

谁能在面向对象的高级语言中做到这些?

语言 值类型(Struct) 不安全代码 SIMD 内置 编译期代码生成
C# ✅ 真正的值语义 unsafe + fixed Vector<T> ✅ Source Generators
Java ❌ 只有装箱类型 ❌ 无 ⚠️ Vector API (实验性) ❌ 无原生支持
Kotlin/JVM ❌ 继承 JVM 限制 ❌ 无 ⚠️ 依赖 JVM
Go struct unsafe ⚠️ 依赖汇编
Swift ✅ 值语义 ❌ 无直接指针 Accelerate
C++ ✅ 原生 ✅ intrinsics ✅ 模板元编程
Rust ✅ 原生 std::simd ✅ 过程宏

关键发现

  • C/C++/Rust 有底层能力,但不是面向对象高级语言
  • Java/Kotlin/Go/Swift 等 OO 语言,要么缺值类型,要么缺不安全代码,要么缺编译期生成
  • C# 是唯一在三个层面同时满足的面向对象语言

四、C# 的独特优势:值类型 + 统一类型系统

为什么 C# 的 struct 比 C++ 更适合性能场景?

C++ 的 structclass 语义几乎无区别(仅默认访问权限不同),而 C# 的 struct真正的值语义

// 零分配、栈上存储、无虚方法表
public readonly record struct RegexState(int Position, int MatchLength);

// 与 Span 配合,实现零拷贝切片
public bool Match(ReadOnlySpan<char> input)
{
    ref char ptr = ref MemoryMarshal.GetReference(input);
    // 直接指针操作,无 GC 压力
}

C# 的三层优势

  1. 值类型 + 引用类型的统一类型系统

    • struct 实现零分配高性能抽象
    • 同时保持接口、方法、属性等 OO 特性
  2. Span<T> / Memory<T> 切片抽象

    • 配合 unsafe 实现 C 级别的内存操作
    • 保持类型安全边界
  3. Source Generators + AOT 编译

    • GeneratedRegex 只是冰山一角
    • 整个 .NET 生态正向"编译期生成 + AOT 优化"迁移

五、GeneratedRegex 的实际优化

.NET 8 的 GeneratedRegex 生成的代码会做什么?

[GeneratedRegex(@"a+b+c+")]
private static partial Regex MyRegex();

// 编译器实际生成:
// 1. 分析正则结构,确定是否可用 DFA
// 2. 简单模式 → 直接生成循环 + SIMD 字符串扫描
// 3. 使用 IndexOfAny 的向量化实现快速跳过不匹配区域
// 4. 状态机用 struct 内联存储,避免堆分配

.NET 团队已在 Regex 中大量使用:

  • IndexOfAny 的 AVX2/AVX-512 向量化
  • Span<T> 的零拷贝切片
  • ✅ DFA/NFA 的缓存友好状态表布局
  • ✅ JIT 的自动向量化(Tiered Compilation + PGO)

六、结论:C# 的"全栈优化"能力

在需要"编译期代码生成 + 底层内存控制 + 向量化优化"的面向对象语言中,C# 是目前唯一在语言层面、运行时层面、编译器层面同时提供完整支持的生态。

GeneratedRegex 只是这个链条的一个展示窗口——它证明了 C# 可以在保持高级语言开发效率的同时,达到接近手写 C 代码的性能。

这不是某个特性的胜利,而是语言设计的胜利。


延伸阅读