
.NET 9的极简API性能实现飞跃式提升,其每秒处理的请求数量较.NET 8增长15%,同时内存消耗降低93%,性能全面超越传统Controller模式。
极简API对比Controller的核心优势: ✅ 卓越性能(如上数据证明) ✅ 单一职责原则:每个端点独立运作,拥有专属依赖项,避免臃肿控制器中冗余依赖的问题 ✅ 精细控制:提供路由与中间件配置的颗粒度管理 ✅ 开发效率:免去控制器模板代码,快速搭建端点提升生产力 ✅ 架构兼容性:完美契合垂直切片架构(Vertical Slice Architecture)等现代设计理念
根据微软基准测试,.NET 9的异常处理速度提升2-4倍,数据库访问错误、外部服务宕机、文件缺失、请求超时等场景均可受益。
重要提示:异常机制适用于异常场景而非业务逻辑控制,推荐结合Result模式使用。
传统IMemoryCache存在缓存雪崩问题,.NET 9推出的HybridCache创新性地整合本地缓存与分布式缓存(如Redis),通过以下方式解决核心痛点:
// NuGet安装指令
dotnet add package Microsoft.Extensions.Caching.Hybrid
// DI注册配置(注意:HybridCache当前为预览版)
#pragma warning disable EXTEXP0018
services.AddHybridCache(options =>
{
options.DefaultEntryOptions = new HybridCacheEntryOptions
{
Expiration = TimeSpan.FromMinutes(),
LocalCacheExpiration = TimeSpan.FromMinutes()
};
});
#pragma warning restore EXTEXP0018
// 使用示例:原子化缓存获取
private static async Task<IResult> Handle(
[FromRoute] Guid id,
HybridCache cache,
ApplicationDbContext context,
CancellationToken cancellationToken)
{
var bookResponse = await cache.GetOrCreateAsync($"book-{id}",
async token =>
{
var entity = await context.Books
.AsNoTracking()
.Include(b => b.Author)
.FirstOrDefaultAsync(b => b.Id == id, token);
return entity isnotnull ? new BookResponse(entity.Id, entity.Title, entity.Year, entity.Author.Name) : null;
},
cancellationToken: cancellationToken
);
return bookResponse isnotnull ? Results.Ok(bookResponse) : Results.NotFound();
}.NET 9新增的3个LINQ方法将重构代码编写方式:
// 旧方案
var countByName = orders.GroupBy(p => p.Name).ToDictionary(g => g.Key, g => g.Count());
// 新方案
var countByName = orders.CountBy(p => p.Name);// 旧方案
var totalPricesByCategory = orders.GroupBy(x => x.Category).ToDictionary(
g => g.Key,
g => g.Sum(x => x.Quantity * x.Price)
);
// 新方案
var totalPricesByCategory = _orders.AggregateBy(
x => x.Category,
_ => 0.0m,
(total, order) => total + order.Quantity * order.Price
);// 新方案
foreach (var (index, item) in orders.Index())
{
Console.WriteLine($"Order #{index}: {item}");
}EF 9引入UseSeeding和UseAsyncSeeding方法,彻底改变数据库初始化方式:
builder.Services.AddDbContext<ApplicationDbContext>((provider, options) =>
{
options.UseNpgsql(connectionString)
.UseAsyncSeeding(async (dbContext, _, cancellationToken) =>
{
var authors = GetAuthors();
var books = GetBooks(, authors);
await dbContext.Set<Author>().AddRangeAsync(authors);
await dbContext.Set<Book>().AddRangeAsync(books);
await dbContext.SaveChangesAsync();
});
});var groupedAddresses = await context.Customer.GroupBy(b => b.Address).Select(g => new { g.Key, Count = g.Count() }).ToListAsync();var address = new Address("New York City", "Baker's st.", "54");
await context.Customers
.Where(e => e.Address.City == "New York City")
.ExecuteUpdateAsync(s => s.SetProperty(b => b.StoreAddress, address));// 支持类型扩展
public void PrintNumbers(params List<int> numbers) { ... }
// 使用示例
List<int> numbers = [, , , , ];
PrintNumbers(numbers);public class LockClass
{
private readonly System.Threading.Lock _lockObj = new();
public void Do(int i)
{
lock (_lockObj)
{
Console.WriteLine($"Do work: {i}");
}
}
}// .NET 9推荐方案
app.MapStaticAssets("wwwroot");
// 核心优势
✓ 开发环境gzip压缩 + 发布时brotli压缩
✓ 内容指纹ETag支持(基于SHA-256哈希)
✓ 更优的构建时资源压缩• .NET MAUI混合式Blazor解决方案 • 运行时渲染模式检测 • 服务端重连体验优化 • 认证状态序列化简化 • 全局交互式Blazor Web App支持SSR • WebSocket压缩支持 • 键盘组合键处理