【.NET新特性·第5篇】.NET 9 速览:云原生与性能之年

.NET 9 是微软一年一版本节奏的第二个版本,聚焦云原生应用和性能优化

版本定位

适用版本:.NET 9 | STS(Standard Term Support) 支持周期:18 个月(2024.11 - 2026.05) 前置知识:.NET 8 基础

背景

从 .NET 8 开始,微软采用了"一年一版本"的发布节奏。.NET 9 是这个节奏的第二个版本,它不是 LTS,而是 STS(Standard Term Support),支持周期只有 18 个月。

但这并不意味着 .NET 9 不重要。相反,它带来了许多面向云原生和性能的改进,特别是 AI 构建基块,是微软在 AI 时代的重要布局。

.NET 9 的定位

特性 说明
发布时间 2024 年 11 月
支持类型 STS(Standard Term Support)
支持周期 18 个月(至 2026 年 5 月)
C# 版本 C# 13
核心主题 云原生 + 性能 + AI

LTS vs STS 再回顾

类型 .NET 8 (LTS) .NET 9 (STS)
支持周期 3 年 18 个月
稳定性
新特性 保守 激进
适用场景 生产环境 尝鲜/个人项目

建议

  • 生产环境优先选择 .NET 8(LTS)

  • 如果想用新特性,可以尝试 .NET 9

  • .NET 10(2025.11)将是下一个 LTS

新特性一览

特性 简述 实用性
云原生增强 Kubernetes 集成、服务发现、Service Mesh ⭐⭐⭐⭐⭐
性能大幅提升 JIT/GC/Arm64 优化 ⭐⭐⭐⭐⭐
AI 构建基块 Microsoft.Extensions.AI 统一抽象 ⭐⭐⭐⭐⭐
CET 影子栈安全 硬件级控制流保护 ⭐⭐⭐⭐
BinaryFormatter 移除 安全改进,移除不安全序列化 ⭐⭐⭐⭐⭐
.NET MAUI 9 HybridWebView、TitleBar、Native AOT ⭐⭐⭐⭐
WPF Fluent 主题 现代化 UI 主题 ⭐⭐⭐
WinForms 深色模式 原生深色主题支持 ⭐⭐⭐
基线 GC 默认启用 后台垃圾回收 ⭐⭐⭐⭐
动态 PGO 改进 Profile-Guided Optimization ⭐⭐⭐
Lock 类型 新的线程同步原语 ⭐⭐⭐⭐
LINQ 新方法 CountBy、AggregateBy ⭐⭐⭐⭐
SDK 改进 Terminal Logger、工作负载历史 ⭐⭐⭐
破坏性变更 需要注意的升级事项 ⭐⭐⭐⭐⭐

.NET 9 的核心改进

1. 云原生支持增强

复制代码
// 更好的 Kubernetes 集成
builder.Services.AddKubernetesConfiguration();

// 服务发现改进
builder.Services.AddServiceDiscovery();
builder.Services.AddHttpClient<WeatherService>(
    "weather",
    static client => client.BaseAddress = new("https+http://weather"));

2. 性能大幅提升

.NET 9 在性能方面继续发力:

  • JIT 编译器:更好的内联决策、循环优化

  • GC:动态适应应用大小,基线 GC 默认启用

  • Arm64 优化:针对 ARM 架构的特别优化

    // System.Text.Json 性能提升约 25%
    var json = JsonSerializer.Serialize(data);

    // LINQ 新方法:CountBy 和 AggregateBy
    var counts = list.CountBy(x => x.Category);
    var aggregates = list.AggregateBy(x => x.Type, 0, (acc, item) => acc + item.Value);

3. AI 构建基块

.NET 9 引入了 AI 构建基块,这是最大的亮点:

复制代码
// Microsoft.Extensions.AI 统一抽象层
builder.Services.AddChatClient(sp =>
    new OpenAIClient(apiKey).GetChatClient("gpt-4"));

// 向量存储
builder.Services.AddVectorStore()
    .AddRedis<VectorRecord>("redis");

核心组件

  • Microsoft.Extensions.AI:统一 AI 抽象层

  • Microsoft.Extensions.VectorData:向量存储

  • Tensor<T>:张量类型

4. CET 影子栈安全

CET(Control-flow Enforcement Technology)是 Intel/AMD 处理器支持的硬件安全特性:

  • 影子栈(Shadow Stack):防止 ROP(Return-Oriented Programming)攻击

  • 间接分支追踪(Indirect Branch Tracking):防止 JOP(Jump-Oriented Programming)攻击

  • .NET 9 默认启用:无需额外配置,运行时自动利用硬件保护

    true

5. BinaryFormatter 完全移除

.NET 9 彻底移除了 BinaryFormatter,这是最重要的安全改进之一:

复制代码
// ❌ .NET 9 中已移除
var formatter = new BinaryFormatter();
var obj = formatter.Deserialize(stream);

// ✅ 替代方案:使用 System.Text.Json
var obj = JsonSerializer.Deserialize<MyClass>(stream);

// ✅ 替代方案:使用 MessagePack
var obj = MessagePackSerializer.Deserialize<MyClass>(buffer);

// ✅ 替代方案:使用 protobuf-net
var obj = ProtoBuf.Serializer.Deserialize<MyClass>(stream);

6. .NET MAUI 9

MAUI 9 带来多项重要改进:

复制代码
// HybridWebView - 在 WebView 中运行 Blazor 组件
<HybridWebView Src="wwwroot/index.html" />

// TitleBar - 自定义标题栏
<ContentPage>
    <NavigationPage.TitleView>
        <Label Text="My App" />
    </NavigationPage.TitleView>
</ContentPage>

// Native AOT - 编译为原生代码,启动更快

7. WPF Fluent 主题

复制代码
<!-- 在 App.xaml 中启用 Fluent 主题 -->
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/PresentationFramework.Fluent;component/Themes/Fluent.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

8. WinForms 深色模式

复制代码
// 启用深色模式
Application.SetColorMode(ColorMode.Dark);

// 或在配置文件中设置
// runtimeconfig.json
{
  "configProperties": {
    "System.Windows.Forms.ApplicationConfiguration.EnableVisualStylesDarkMode": true
  }
}

9. 新的 Lock 类型

复制代码
// .NET 9 引入的专用 Lock 类型
private readonly Lock _lock = new();

void DoWork()
{
    lock (_lock)  // 自动使用新的 Lock 类型
    {
        // 临界区
    }
}

// 或者显式使用
void DoWorkExplicit()
{
    using var scope = _lock.EnterScope();
    // 临界区
}

10. LINQ 新方法

复制代码
// CountBy - 按键分组计数
var counts = list.CountBy(x => x.Category);
// 结果:[(key: "A", count: 3), (key: "B", count: 2)]

// AggregateBy - 按键分组聚合
var totals = list.AggregateBy(
    x => x.Type,
    0,
    (acc, item) => acc + item.Value);
// 结果:[(key: "Type1", total: 100), (key: "Type2", total: 200)]

11. 基线 GC 默认启用

.NET 9 将 Background GC 设为默认模式:

复制代码
<!-- .csproj 中配置 -->
<PropertyGroup>
  <ServerGarbageCollection>true</ServerGarbageCollection>
  <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>

12. 动态 PGO 改进

动态 Profile-Guided Optimization 在 .NET 9 中得到增强:

  • 更智能的热点检测

  • 更好的内联决策

  • 减少运行时开销

13. SDK 改进

复制代码
# Terminal Logger 默认启用 - 输出更简洁
dotnet build

# 工作负载历史 - 查看已安装的工作负载
dotnet workload history

# 新的构建检查
dotnet build --check

C# 13 新特性预览

.NET 9 搭载 C# 13,带来了 10 个新特性:

特性 简述
params 集合 params 支持 Span<T>IEnumerable<T>
新 Lock 类型 System.Threading.Lock 替代 Monitor
\e 转义序列 新的转义字符
ref struct 接口 ref struct 可以实现接口
allows ref struct 泛型支持 ref struct
partial 属性 属性和索引器支持 partial
overload 优先级 库作者可以指定重载优先级
隐式索引器访问 在对象初始化中直接访问索引器
扩展 nameof 范围 nameof 可以使用更多语法元素
partial 类型改进 更灵活的 partial 定义

破坏性变更

升级到 .NET 9 时需要注意以下破坏性变更:

变更 影响 迁移建议
BinaryFormatter 移除 使用二进制序列化的代码会报错 迁移到 System.Text.Json 或 MessagePack
TLS 1.3 默认启用 某些旧服务器可能不支持 配置 HttpClient 使用 TLS 1.2
GC 行为变化 内存回收模式改变 监控应用内存使用
某些 API 标记为 obsolete 编译警告 按照警告迁移到新 API
复制代码
// TLS 配置示例
var handler = new HttpClientHandler
{
    SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13
};
var client = new HttpClient(handler);

迁移建议

从 .NET 8 升级到 .NET 9

复制代码
# 1. 更新 SDK 版本
dotnet --list-sdks

# 2. 更新项目文件
<TargetFramework>net9.0</TargetFramework>

# 3. 更新 NuGet 包
dotnet list package --outdated

# 4. 测试
dotnet test

升级决策

复制代码
你现在用的版本 → .NET 8 (LTS)
  ↓
需要用 AI 构建基块吗?
  ├── 是 → 升级到 .NET 9
  └── 否 → 等待 .NET 10 (2025.11 LTS)

注意事项

  1. STS 支持周期短:18 个月后需要再次升级

  2. AI 组件预览:部分 AI 组件还在预览

  3. Breaking Changes:部分 API 有变更

  4. BinaryFormatter:必须迁移到其他序列化方案

实战场景

适合升级的场景

  • 想尝试 AI 构建基块

  • 需要更好的性能

  • 个人项目或尝鲜

  • 计划迁移到 .NET 10

可以暂缓的场景

  • 生产环境(建议用 .NET 8 LTS)

  • 依赖的包还不支持 .NET 9

  • 项目稳定运行,没有性能问题

  • 使用 BinaryFormatter 且迁移成本高

一句话总结

.NET 9 是云原生与性能之年,AI 构建基块让你的 .NET 应用拥抱 AI 时代,同时 CET 安全和 BinaryFormatter 移除让应用更安全。


官方文档


📦 示例代码:.NET 新特性巡礼全系列配套示例代码(含 dotnet 8/9/10)

💬 欢迎点赞、收藏、转发,你的支持是我持续创作的动力!

相关推荐
Plastic garden2 小时前
K8s知识(4)Kubernetes 存储 volume
云原生·容器·kubernetes
qq_452396232 小时前
第四篇:《Pod:K8s 中最小的部署单元》
云原生·容器·kubernetes
.NET修仙日记2 小时前
.NET 领域驱动设计:用户角色更新如何从应用服务落地到领域实体(代码拆解)
c#·.net·领域驱动设计·微软技术·角色设计
虎妞05002 小时前
云原生 AI 推理部署:Kubernetes 实战指南
云原生·kubernetes·容器化·kubeflow·ai部署
ChaITSimpleLove2 小时前
Etl.Net 2.2.0 项目深度分析
数据仓库·.net·etl·大数据处理·数据管道·数据处理引擎
java_cj2 小时前
10分钟部署K8s集群:kubeadm极简安装指南
云原生·容器·架构·kubernetes
时光追逐者2 小时前
一个基于 .NET 与 Avalonia 构建、面向 TrinityCore 的开源 WoW 数据库编辑器
数据库·开源·.net
.NET修仙日记2 小时前
Scrutor:.NET 依赖注入自动化的优雅实现
c#·.net·.net core·微软技术·依赖注入·scrutor
Akamai中国2 小时前
Akamai 块存储:低延迟、高可靠的云原生持久存储方案
云原生