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

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - lzhdim

20260714 - 个人小作品更新 WorkBuddy 完整教程手册 专为AI而生的企业级QLC SSD!长江存储PE501 61.44TB评测:超过1PB的写入测试 32GB显存才是第一生产力!英特尔锐炫 Pro B70评测:中小企业AI降本神器 JavaScript中的this关键字 C#开发的PopoSaver泡泡屏保应用 - 开源研究系列文章 - 个人小作品 6天不间断测试告诉你到底有多省电!米家空调巨省电大1.5匹评测:制冷峰值功率不超过500W 三倍双摄加持 + D-Log 2 曲线!大疆DJI OSMO Pocket 4P全面评测:补齐短板,化身口袋电影机 晶栈4.0闪存立威!长江存储致态TiPro9000 2TB SSD评测:缓外写入超4GB/s独一档 C# 多线程同步机制详解:原理、使用与性能对比 JavaScript作用域与闭包讲解 最受欢迎的 10 大免费 AI 工具 六种AI生意,从月入一万到月入十万 5个国产大模型实测对比2026:DeepSeek、Kimi、豆包、通义、智谱哪个好用 豆包、元宝、千问、Kimi、DeepSeek,这么多AI软件,到底该用哪个? 微软免费开源了一个 Linux 操作系统,没错!是微软出品 一次看懂5种咖啡冲煮方式:意式、手冲、法压、冷萃、摩卡壶到底有什么区别 120个 实用CSS 技巧汇总合集 JavaScript运算符与表达式详解 C#开发的ScreenSaver屏保应用 - 开源研究系列文章 - 个人小作品 WinForm 中跨线程操作 UI 的解决方案 JavaScript变量与数据类型详解 苹果良心!iOS 27适配设备公布:30款机型 7年前的iPhone 11还能升级 C++图形用户界面开发入门 10个不该免费的GitHub神级项目 JavaScript语言全面概述:从历史到现代实践 一张图看懂常见咖啡 C盘空间多出来4GB:谷歌服软 Chrome本地AI大模型可禁用、删除了 96GB显存运行230B大模型!七彩虹灵创K16笔记本评测:160W性能释放 AMD锐龙AI Max+ 395加持全能移动AI工作站 AI PC最强存储搭档!雷克沙NM1090 PRO 8TB固态评测:14400MB/s满速不缩水 EasyTool:轻量全能的 .NET 工具类库 SQL 入门 17:MySQL 数据类型:从字符串到 JSON 的全面解析 SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂) 原相3955XM+TL3228主控!小米电竞鼠标2全面评测:原生双8K究竟有多强 PCIe 4.0火力全开:闪迪奥丁马仕GX 7100 NVMe SSD上手 超乎预料的千元级电竞主板!七彩虹iGame B850M Ultra-OC V14主板评测 SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题 名人 - 我的闪存 C#性能优化技巧 SQL 入门 14:SQL 触发器与事件:自动化数据处理 38个实用的JavaScript 技巧 一款基于 .Net WinForm 开发的节点编辑器,纯 GDI 实现,体积仅 100+Kb Masuit.Tools:这个 C# 工具库 SQL 入门 13:SQL 存储过程与函数:封装逻辑与参数处理 49个 JavaScript 代码快捷技巧,让你在 2026 年成为代码高手 20260503 - 个人小作品更新 SQL 入门 12:SQL 视图:创建、修改与可更新视图 C#如何实现Windows系统桌面截图功能... 6999元AMD新旗舰首测!锐龙9 9950X3D2性能解禁:这颗U根本不是给游戏玩家造的 SQL 入门 11:日期时间格式化、IF、CASE的使用 基于C#的校时类库的实现及使用 - 开源项目研究文章
C#已经不是当年的C#了——我用它写了个微秒级数据库引擎
lzhdim · 2026-06-05 · via 博客园 - lzhdim

当你看到"CRUD MVCC事务:1.2微秒"这个指标,你第一反应是哪种语言写的?C?Rust?

答案是 C#

这个结果来自一个叫 Typhon 的项目——用 .NET/C# 编写的嵌入式 ACID 数据库引擎,作者是法国工程师 Loïc Baumann,有30年实时3D引擎和系统软件开发经验。他的目标很直接:在 .NET 生态里实现 1-2 微秒级事务提交延迟。

"大家都会告诉你,做高性能数据库引擎只能用 C、C++ 或 Rust。" Baumann 在博客里写道,"我选了 C#。"

现代 C# 已经不是你认识的那个 C# 了。

GC暂停问题:固定内存就解决了

GC 会产生 10ms 级别的暂停。对微秒级延迟来说,10ms 是 10000 倍的延迟预算,直接报废。

但 Typhon 的解决方案出奇地简单:用 GCHandle.Alloc(Pinned) 把页面缓存的内存固定死。GC 永远不会碰这块内存——不会扫描,不会移动,不会压缩。它就像 malloc 分配出来的原始字节一样,只是地址固定。

关键在于:只在真正重要的内存上固定,而不是把整个堆都 pin 住。页面缓存是 Typhon 的高频路径,事务操作全部落在这块固定内存上,GC 的影响因此被压制到最小。

内存布局:unsafe可以精确到字节

托管堆会压缩和移动对象。你无法保证 B+Tree 节点恰好对齐在缓存行边界上,无法保证页面缓存在事务执行到一半时不会被 GC 悄悄移走。

现代 C# 的解法:

// 控制每个字段的偏移量、填充、缓存行对齐
[StructLayout(Explicit)]
 
// 创建固定大小的内联数组
fixed byte[128] _buffer;
 
// 裸指针和指针运算
unsafe { byte* ptr = &data; }

Typhon 的 EntityRef 结构体是 96 字节的 ref struct,完全在栈上生存,永不逃逸到堆。零 GC 压力,零间接寻址。

SIMD指令:直接调CPU指令

这是最让人震惊的部分。

System.Runtime.Intrinsics 提供 Sse42.X64.Crc32、Vector256——直接对应 CPU 指令集中的具体指令。你写的是 C# 代码,JIT 编译出来的是一条 x86 crc32 指令。

// Typhon 的 WAL 校验和计算
private static uint ComputeSse42X64(
    uint crc, ReadOnlySpan<byte> data) {
    ulong crc64 = crc;
    ref byte ptr = ref MemoryMarshal.GetReference(data);
    // 直接调用 CPU 的 crc32 指令
    crc64 = Sse42.X64.Crc32(crc64,
        Unsafe.ReadUnaligned<ulong>(ref ptr));
    return (uint)crc64;
}

每 8KB 页面只需约 1.3 微秒。运行时自动检测 CPU 是否支持 SSE4.2,不支持则自动 fallback。JIT 会把不支持的分支识别为死代码,在最终编译时完全消除。

零拷贝:直接指向内存页

EntityRef.Read<T>() 返回 ref readonly T,直接指向 pinned 内存页中的确切位置。

整个链路:方法调用 → slot 查找 → chunk ID → 页面缓存 → 指针算术 → 引用。没有拷贝,没有分配,零 GC 参与。

关键是 where T : unmanaged 约束——JIT 知道这个类型的内存布局是确定的,生成的就是指针算术,没有任何额外的运行时检查。

真正的瓶颈:内存访问模式,不是语言

来看一个数据。Ryzen 7950X 上,L1 缓存命中需要 1.4 纳秒。DRAM 访问(缓存未命中)需要 61-73 纳秒。差距 50:1

也就是说,无论你用什么语言,只要你制造了缓存未命中,CPU 就要等上 250 个时钟周期。没有任何"零成本抽象"能弥补这个差距。

Typhon 的 B+Tree 节点被设计为 128 字节——恰好是两条缓存行的大小。在 Zen4 架构上,步幅预取器会自动预取第二条缓存行。这个设计让插入延迟降低了 53%,查询延迟降低了 30%

选什么语言不重要,数据结构对缓存是否友好才重要。

一句话总结

性能的关键不是选 C、Rust 还是 C#,而是你的数据结构对缓存是否友好。现代 C# 完全有能力进入微秒级俱乐部——前提是你愿意去了解它的底层能力。

unsafe、ref struct、Constrained generics、System.Runtime.Intrinsics——这不是奇怪的边缘特性,这是 .NET 团队花了十年时间构建的系统编程基础设施。

真正值得投资的,是加深对内存层次和缓存局部性的理解。语言只是工具。

引用来源:Why I'm Building a Database Engine in C# by Loïc Baumann,2026年3月28日