Microsoft发布.NET 11 Preview 2,带来更清晰的堆栈跟踪

微软发布.NET 11预览版2,重点改进包括原生运行时异步、Linux和macOS平台SDK安装包体积缩减等。该版本在运行时原生异步方面取得重大进展,运行时直接管理异步挂起和恢复,产生更清晰的堆栈跟踪、更好的调试体验和更低的开销。SDK通过符号链接去重程序集,显著减少了Linux和macOS安装包大小。

微软发布了其计划中的.NET 11软件开发平台的Preview 2版本,该版本在本地运行时异步处理、Linux和macOS系统的SDK安装包缩小等方面取得了显著进展。

.NET 11 Preview 2于3月10日发布,可从net.microsoft.com下载。Preview 2是继2月10日发布Preview 1之后的版本,正式版预计将在11月发布。

运行时异步处理的重大进展

根据微软介绍,Preview 2在运行时原生异步处理方面取得了重大进展。与编译器生成状态机类不同,运行时本身现在管理异步挂起和恢复操作。这产生了更清晰的堆栈跟踪、更好的调试体验和更低的开销。但运行时异步仍然是预览功能。编译器必须使用MethodImplOptions.Async标记方法,运行时才会将它们视为运行时异步方法。

在运行时方面,JIT编译器现在可以消除常见模式中的边界检查,即索引加常数与长度比较的情况。被证明冗余的检查算术上下文也会被优化掉。

SDK安装包优化

对于SDK,Linux和macOS上的安装包大小通过使用符号链接去重复程序集得到了缩减。重复的.dll和.exe文件通过内容哈希识别,并替换为指向单一副本的符号链接。这影响了压缩包以及.pkg、.deb和.rpm安装程序。

代码分析器在SDK中得到改进,以避免潜在昂贵的日志记录。属性访问、GetType()、GetHashCode()和GetTimestamp()调用不再被标记。默认情况下,诊断现在仅适用于信息级别及以下,因为警告/错误/关键代码路径很少是热点路径。诊断消息现在包括参数被标记的原因,帮助开发人员优先处理哪些警告。

.NET 11库的新功能

在.NET 11库中,TarFile.CreateFromDirectory的重载接受TarEntryFormat参数,提供对归档格式的直接控制。以前,CreateFromDirectory产生Pax归档。新的重载支持所有四种tar格式——Pax、Ustar、GNU和V7——以兼容特定工具和环境。

其他改进功能

.NET 11 Preview 2还包含以下附加改进:

ASP.NET Core的性能改进使Kestrel的HTTP/1.1请求解析器现在使用非抛出代码路径处理格式错误的请求。解析器不再在每次解析失败时抛出BadHttpRequestException,而是返回指示成功、不完整或错误状态的结果结构。在有许多格式错误请求的场景中——如端口扫描、恶意流量或错误配置的客户端——这消除了昂贵的异常处理开销,同时将吞吐量提高了20%到40%。有效请求处理不受影响。

F#语言简化了DIM(默认接口成员)层次结构。此外,F#的预览功能(--langversion:preview)缓存了具有相同参数类型的重复方法调用的重载解析结果。

对于.NET MAUI(多平台应用程序UI)中的地图控件,Location和MapSpan的新TypeConverter实现支持简洁的XAML语法用于地图坐标,消除了冗长的x:Arguments标记的需要。同样在.NET MAUI中,TypedBinding和SourceGeneratedBinding现在快约29%,每个绑定操作的内存分配减少了50%。

Entity Framework(EF)Core支持转换LINQ的MaxByAsync和MinByAsync方法及其同步版本。这些方法允许开发人员找到给定键选择器的最大值或最小值元素,而不仅仅是最大值或最小值本身。

Q&A

Q1:.NET 11 Preview 2的运行时异步处理有什么改进?

A:.NET 11 Preview 2在运行时原生异步处理方面取得重大进展。与编译器生成状态机类不同,运行时本身现在管理异步挂起和恢复操作,这产生了更清晰的堆栈跟踪、更好的调试体验和更低的开销。

Q2:.NET 11 Preview 2如何缩小Linux和macOS的SDK安装包?

A:通过使用符号链接去重复程序集来缩减安装包大小。重复的.dll和.exe文件通过内容哈希识别,并替换为指向单一副本的符号链接。这影响了压缩包以及.pkg、.deb和.rpm安装程序。

Q3:ASP.NET Core在.NET 11 Preview 2中有哪些性能提升?

A:Kestrel的HTTP/1.1请求解析器现在使用非抛出代码路径处理格式错误的请求,不再抛出异常而是返回结果结构。这消除了异常处理开销,在有许多格式错误请求的场景中将吞吐量提高了20%到40%。

来源:InfoWorld

0赞

好文章,需要你的鼓励

2026

03/17

10:52

分享

点赞

邮件订阅