.NET 8 / 9 / 10 版本更新对比一览
从 .NET 8(LTS)到 9(STS)再到 10(LTS),运行时、GC、JIT、SDK、ASP.NET Core 到底改了什么?一篇按主题横向对比,帮你决定升不升、升到哪。
最近几个 .NET 大版本节奏很稳:每年 11 月一个,奇数版是 STS(标准支持,18 个月),偶数版是 LTS(长期支持,3 年)。这篇把 .NET 8 / 9 / 10 的关键变化按主题横着摆,方便对比。
| 版本 | 发布 | 类型 | 支持到 |
|---|---|---|---|
| .NET 8 | 2023-11 | LTS | 2026-11 |
| .NET 9 | 2024-11 | STS | 2026-05(已接近 EOL) |
| .NET 10 | 2025-11 | LTS | 2028-11 |
结论先行:生产环境优先选 LTS(8 或 10)。.NET 9 作为 STS 支持期短,适合愿意跟进、追新特性的项目。新项目直接上 .NET 10。
| 维度 | .NET 8 | .NET 9 | .NET 10 |
|---|---|---|---|
| 动态 PGO | 默认开启(平均 +15% 性能) | 持续优化 | 持续优化 |
| 结构体提升 | 新增 physical promotion(打破”≤4 字段”限制) | — | — |
| SIMD | AVX-512 支持 | Arm64 向量化增强 | AVX10.2 支持(待硬件) |
| 内联/去虚化 | — | 循环优化 | 数组接口方法去虚化、try-finally 也能内联 |
| 栈分配 | — | — | 闭包/委托可栈分配(逃逸分析增强) |
| 循环优化 | — | 引入多项循环优化 | 图结构循环识别,loop inversion 更精准 |
| 代码布局 | — | — | 用 3-opt 启发式(类比 TSP)重排基本块,热路径更紧凑 |
- .NET 8:引入 DATAS(动态适配应用大小)作为 可选 特性 —— 堆大小随存活数据按比例伸缩。
- .NET 9:DATAS 默认开启,替代默认的 Server GC 行为,云原生/容器内存占用更友好。
- .NET 10:Arm64 写屏障改进,GC 暂停时间实测改善 8% ~ 20%。
如果你跑在 Arm64(如 AWS Graviton、Apple Silicon、树莓派),.NET 10 的 GC 改进尤其值得升。
| 版本 | 安全相关 |
|---|---|
| .NET 9 | CET(控制流强制技术)在 Windows 默认开启 —— 硬件级栈保护,防 ROP 攻击 |
| .NET 10 | 后量子密码学大幅扩展:ML-DSA 简化 API、HashML-DSA、Composite ML-DSA、Windows CNG 支持;AES KeyWrap with Padding |
- .NET 8:
SearchValues<T>(高速多值查找)、CompositeFormat、XxHash3/XxHash128。 - .NET 9:
SearchValues扩展、特性开关(feature switch)+ 裁剪支持。 - .NET 10:
- JSON:禁止重复属性、严格序列化、
PipeReader支持 - 网络:
WebSocketStream简化用法、macOS 客户端 TLS 1.3 - 加密/全球化/数值/集合/诊断/ZIP 多处新 API
- 进程管理:Windows 进程组(更好的信号隔离)
- JSON:禁止重复属性、严格序列化、
.NET 10 SDK 这块改进非常实用:
dotnet test支持 Microsoft.Testing.Platform(MTP) —— 新一代测试运行时- CLI 命令顺序标准化,生成各 shell 的原生 Tab 补全脚本
- 控制台应用可原生打包容器镜像,新属性可显式指定镜像格式
dotnet tool exec一次性执行工具 + 新的dnx执行脚本- 平台特定工具兼容性增强(
anyRID) --cli-schema做 CLI 自省- **基于文件的应用(file-based apps)**支持 publish 和 Native AOT —— 单文件脚本式 C# 体验更完整
- .NET 9:内置 OpenAPI 文档生成、静态资源指纹化、Blazor 多项改进。
- .NET 10(ASP.NET Core 10):Blazor WebAssembly 预加载、内存池自动驱逐、表单验证增强、Identity 的 Passkey 支持、诊断改进。
Aspire 已从 .NET 独立出来按自己的节奏迭代,.NET 10 时代对应 Aspire 13.1,用于本地编排多服务 + 可观测性面板。
# 查看已安装的 SDK / 运行时dotnet --list-sdksdotnet --list-runtimes
# 项目里改目标框架# <TargetFramework>net10.0</TargetFramework>
# 用内置工具扫描升级点(可选)dotnet tool install -g upgrade-assistantupgrade-assistant upgrade升级清单建议:
- 改
TargetFramework→net10.0 dotnet restore && dotnet build,处理告警- 跑测试(顺便体验 MTP)
- 关注默认行为变化(如 GC DATAS、Windows CET),压测确认无回归
- 求稳/生产 → .NET 10(LTS,3 年支持,GC/JIT 全面提升)
- 还在 .NET 8 → 不急,支持到 2026-11;但新项目别再起 8 了
- 在 .NET 9 → 尽快迁到 10(9 是短支持,快 EOL)
数据来源:Microsoft Learn《What’s new in .NET 8/9/10》官方文档。