【.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)

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

相关推荐
阿里云云原生4 小时前
Higress v2.2.3 发布:正式入驻 CNCF Sandbox,AI Gateway 与 Ingress 迁移能力双向加固
云原生
阿里云云原生1 天前
香港站【企业 AI Agent 工程化实战专场】来啦,邀您7月9日见!
云原生·agent
阿里云云原生1 天前
研发域与运维域的“数字握手”:通过 Agentic Skills 实现 DevOps 全链路自动化
云原生
阿里云云原生5 天前
AI 开发新常态:当 Cursor、Claude、Codex 并行,如何统一管理散落的 Skill 资产?
云原生·ai编程
探索云原生5 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Java之美5 天前
从edge-trigger到level-trigger,谈谈 Kubernetes controller 的开发范式
云原生
阿里云云原生6 天前
深度解构:当 Append-only 的 SLS 遇上 Update/Delete,是如何实现设计权衡的?
云原生
唐青枫6 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
Java之美6 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes