.NET 7 Preview 3 已发布, .NET 7 的第三个预览版包括对可观察性、启动时间、代码生成、GC 区域、Native AOT 编译等方面的增强。
Native AOT 编译
Native AOT 的主要优势在于启动时间、内存使用、访问受限平台(不允许 JIT)以及磁盘空间更小。Preview 3 版本对 Native AOT 性能进行了优化更新,以下是最新的 Native AOT 性能(与现有的 AOT 编译 “ReadyToRun” 对比):
接下来的几个 .NET 版本将持续改进 Native AOT 兼容性,且将在 dotnet SDK 中添加一流的支持(Crossgen 应用程序),以支持使用 Native AOT 发布项目。
可观察性
.NET 7 继续发展对云原生 OpenTelemetry 规范的支持。预览版 3 添加了对规范更新的支持 (#988 和 #1708),使得跟踪状态对于采样器可变。
- 允许跟踪采样器修改活动跟踪状态
// ActivityListener Sampling callback listener.Sample = (ref ActivityCreationOptions<ActivityContext> activityOptions) => { activityOptions = activityOptions with { TraceState = "rojo=00f067aa0ba902b7" }; return ActivitySamplingResult.AllDataAndRecorded; };
改进启动时间
性能仍然是 .NET 7 的主要关注点。dotnet/runtime#65738 PR ,重新实现了预代码和调用计数存根(使用分层编译帮助程序存根),可显著减少运行时中创建后再修改的可执行代码数量。
启用该 Write-Xor-Execute 新功能可缩短 10-15% 启动时间。即使没有启用 Write-Xor-Execute,此更改也带来了一些微基准测试和一些 ASPNet 基准测试的稳态性能提高(高达 8%)。
循环优化
- 循环克隆 功能将 System.Collections.Tests.Perf_BitArray.BitArrayLeftShift(Size: 512) 的单次调用持续时间提高了 21%:
默认启用 GC 区域
在 Preview 3 中,除了 MacOS 和 NativeAOT 之外的所有平台都默认启用 GC 区域功能,该功能有助于提升高吞吐量应用程序的内存利用率。
有关 GC 区域功能的详细信息可在该 Issue 中查看。
代码生成
该版本对代码生成和 JIT 编译进行了多项优化和错误修复,比如
- 为 ARM32 启用快速尾调用优化
- 将“X & 1 == 1”优化为“X & 1” (#61412)
- ZeroObj 断言
- 去重 HWI 代码生成代码
- 在 x86 上对 8/12 字节结构参数使用 push
...
更多内容可在官方博客中查看。