Skip to content
bitzorcas
中EN

Concept

Source Generator 与 Native AOT:零反射编译期代码生成

深入解析 BitzOrcas.Modern 编译期代码生成体系:Minimal API 端点生成器、双 ORM Fluent 静态映射器、JSON 序列化生成器与 .NET 10 Native AOT 极致性能实践。

Last updated

在云原生容器与 Serverless 时代,传统依赖运行时反射(Reflection)的框架面临冷启动慢、内存占用高与 AOT 裁剪不兼容等痛点。 BitzOrcas.Modern 坚决确立了 “Source Generator First” 架构红线:所有元数据解析与胶水代码全部交由 Roslyn 增量代码生成器在编译期完成。

编译期 Roslyn 增量生成全景图

三大核心 Source Generator

1. EndpointGenerator (生成 Minimal API 路由与 MapPost)

2. FluentMappingGenerator (生成 EF Core & SqlSugar 静态配置)

3. JsonContextGenerator (生成 System.Text.Json AOT 序列化上下文)

C# 源码声明 ([GenerateEndpoint], [BitzTable], [BitzColumn])

Roslyn 增量分析管道 (IIncrementalGenerator)

编译期静态 C# 源码 (.g.cs 文件)

.NET 10 Native AOT 静态编译 (零反射产物二进制)


三大核心 Roslyn 增量生成器

1. Minimal API 端点生成器(EndpointGenerator)

自动扫描标注了 [GenerateEndpoint] 的 Command/Query 契约,在编译期产出静态端点绑定代码:

由 EndpointGenerator 自动生成的静态代码示例
// 1. 由 EndpointGenerator 在编译期自动生成的 Minimal API 路由映射扩展方法
// 2. 静态分派至 Mediator 管道,原生免疫 Native AOT 属性与反射裁剪
public static void MapGeneratedEndpoints(this IEndpointRouteBuilder app)
{
app.MapPost("api/legal/matters", async (
CreateMatterIntakeCommand command,
IMediator mediator,
CancellationToken ct) =>
{
var result = await mediator.Send(command, ct);
return result.ToHttpResult();
})
.RequireAuthorization("Legal.Matters.Create");
}

2. 双 ORM Fluent 静态映射生成器(FluentMappingGenerator)

自动读取聚合根上的 [BitzTable] 与 [BitzColumn] 特性,直接输出 EF Core IEntityTypeConfiguration<T> 与 SqlSugar 实体描述符:

  • 彻底废弃运行时 modelBuilder.ApplyConfigurationsFromAssembly 反射扫描;
  • 静态注册表结构与字段元数据,完全免疫 AOT 属性裁剪。

3. JSON 序列化上下文生成器(JsonContextGenerator)

自动为所有入站请求与出站 DTO 生成强类型 JsonSerializerContext,杜绝 System.Text.Json 在运行时利用反射生成 IL 发射代码。


Native AOT 编译与性能收益

性能指标传统运行时反射单体BitzOrcas.Modern Native AOT性能提升幅度
容器冷启动耗时1800ms ~ 3500ms< 45ms提升 50+ 倍
基础常驻内存 (RSS)220MB ~ 450MB< 38MB降低 85%
容器镜像体积280MB (完整运行时)< 45MB (独立二进制)缩小 80%
P99 尾部延迟15ms (存在 JIT 预热抖动)< 1.8ms (完全预编译)极度平稳

总结

通过 Roslyn 增量生成器与 Native AOT,BitzOrcas.Modern 实现了极致的工程效率与云原生性能的完美融合。

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%