.NET 7 来了!!!
.NET 7 首个RC(发布候选)版本
最近 .Net 的大事件,就是微软发布了.NET 7的首个RC(发布候选)版本,而据微软发布的消息,这是 .NET 7 的最后一个预览版,下一个版本将是第一个候选版本 (RC),发布时间定于 2022 年 11 月 8 日至 10。
.Net 7 适用于 Windows、macOS 与 Linux,已经支持在生产环境上使用(在这里还是建议小伙伴们稳重一点,先用小项目试试水)。而微软提供的日志,显示,NET 7 RC 1 首次加入云原生支持,这将使得开发者能够更加便利的实现应用上云,或在云端直接构建并运行应用的操作,理论上大大提升了开发效率、生产效率。
除此之外,.NET 7 RC 1还带来了大量更新与优化,具体如下:
-.NET MAUI:.NET多平台应用程序 UI (MAUI) 将 Android、iOS、macOS 和 Windows API 统一到一个API中,开发者可以编写一个在多平台上本机运行的应用。作为.NET 7的一部分,.NET MAUI提供了一个项目来处理跨设备及其平台的多目标。
-ARM64:.NET可帮助开发者构建在ARM设备上运行的应用,.NET 7将迎来多项改进。
-现代化:为了使升级体验尽可能无缝,.NET升级助手为开发者提供分步指导体验,通过分析和改进项目文件、代码文件和依赖项来现代化.NET应用。
-性能:.NET 7是目前最快的.NET。.NET 7对反射、堆栈替换 (OSR)、启动时间、本机 AOT、循环优化和许多其他领域进行了超过一千项影响性能的改进。
目前,微软已经放出了.NET 7 RC 1的链接,有需求的用户可以前往下载,传送门
而微软这边也有相关的博客,感兴趣的小伙伴可以去看看,因为是英文的,浏览器翻译出来的懂得都懂,我就不献丑总结了,硬要说,就是一个字:快!传送门
.NET 7 最新更新
下面是摘抄的一些资料,希望能让小伙伴们更加容易了解到 .Net 7
使用 System.LINQ 简化排序
System.Linq 现在有方法 Order 和 OrderDescending,它们可以根据 T 对 IEnumerable 进行排序。
IQueryable 现在也支持这个。
注意:此更改不会向 System.Linq.Expressions 引入新的语言功能。
用法
以前,您必须通过引用自己的值来调用 OrderBy/OrderByDescending。
var data = new[] { 2, 1, 3 }; var sorted = data.OrderBy(static e => e); var sortedDesc = data.OrderByDescending(static e => e);
现在,您可以编写为:
var data = new[] { 2, 1, 3 }; var sorted = data.Order(); var sortedDesc = data.OrderByDescending();
支持 Unix 文件模式
以前,.NET没有对获取和设置Unix文件权限的内置支持,Unix文件权限控制哪些用户可以读、写和执行文件和目录。P/Invoking 手动调用系统并不总是那么容易,因为有些在不同的发行版上以不同的方式公开。 例如,在Ubuntu上你可能需要调用__xstat,在RedHat上调用stat等。 这使得一流的 .NET API 很重要。
在预览版7 中,我们引入了一个新的枚举:
public enum UnixFileMode { None, OtherExecute, OtherWrite, OtherRead, GroupExecute, GroupWrite, GroupRead, UserExecute, UserWrite, UserRead, ... }
以及 API File.GetUnixFileMode 和 File.SetUnixFileMode,它们在路径或句柄(文件描述符)上获取和设置文件模式。 以及 FileInfo 和 DirectoryInfo 上一个名为 UnixFileMode 的新属性。
还有一个新的 Directory.CreateDirectory 重载和 FileStreamOptions 上的一个新属性,允许您一次性创建具有特定模式的目录或文件。 请注意,当您使用这些时,仍会应用 umask,就像您在 shell 中创建目录或文件一样。
用法
// 创建具有特定权限的新目录 Directory.CreateDirectory("myDirectory", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute); // 创建具有特定权限的新文件 FileStreamOptions options = new() { Access = FileAccess.Write, Mode = FileMode.Create, UnixCreateMode = UnixFileMode.UserRead | UnixFileMode.UserWrite, }; using FileStream myFile = new FileStream("myFile", options); // 获取现有文件的模式 UnixFileMode mode = File.GetUnixFileMode("myFile"); // 设置现有文件的模式 File.SetUnixFileMode("myFile", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute);
非常感谢 tmds,他是 Red Hat 的长期贡献者,他提出、设计和实现了这个功能。
低级结构改进:ref 字段支持
.NET 7 运行时现在完全支持 ByRefLike 类型(即 ref struct)中的 ref 字段。 在这个备受期待的功能背后有广泛的语言设计,用户可以阅读:低级结构改进。 借助此功能,以前需要在运行时进行专门处理的类型(例如,Span<T> 和 ReadOnlySpan<T>)现在可以在 C# 中完全实现。
LibraryImport P/Invoke 源生成器
LibraryImport 源生成器现在以受支持的方式提供给所有用户。 超过18个月的努力,这个源生成器被设计成大多数DllImport使用的直接替代品,无论是在运行时产品和用户代码中。 .NET 库都采用了 LibraryImport,并且自 .NET 7 预览版 1 以来一直附带源代码生成的编组代码。
源代码生成器随 .NET 7 TFM 一起提供,可随时使用。 为了获得源生成编组的好处,请将 DllImport 的用法替换为 LibraryImport。 有分析器和固定器可以帮助完成这个过程。
用法
前
public static class Native { [DllImport(nameof(Native), CharSet = CharSet.Unicode)] public extern static string ToLower(string str); }
后
public static class Native { [LibraryImport(nameof(Native), StringMarshalling = StringMarshalling.Utf16)] public static partial string ToLower(string str); }
有一个分析器和代码修复程序可以自动将您的 DllImport 属性转换为 LibraryImport。 对于预览版7,它是可选的。 将 dotnet_diagnostic.SYSLIB1054.severity = suggestion添加到您的 编辑器配置 文件以启用转换分析器作为诊断。
有关编组自定义类型的设计文档和详细信息可以在 docs/design/libraries/LibraryImportGenerator 找到。
ClientWebSocket 升级响应详细信息
ClientWebSocket 以前没有提供有关升级响应的任何详细信息。 但是,有关响应标头和状态代码的信息在失败和成功方案中可能都很重要。
在失败的情况下,状态码可以帮助区分可重回和不可重回错误(服务器根本不支持 Web 套接字,而只是一个微小的暂时性错误)。 标头还可能包含有关如何处理这种情况的附加信息。
即使在成功的 Web 套接字连接的情况下,标头也很有帮助,例如,它们可以包含绑定到会话的token、一些与子协议版本相关的信息,或者服务器可能即将关闭等。
用法
ClientWebSocket ws = new(); ws.Options.CollectHttpResponseDetails = true; try { await ws.ConnectAsync(uri, default); // 成功场景 ProcessSuccess(ws.HttpResponseHeaders); ws.HttpResponseHeaders = null; // 清理(如果需要) } catch (WebSocketException) { // 失败场景 if (ws.HttpStatusCode != null) { ProcessFailure(ws.HttpStatusCode, ws.HttpResponseHeaders); } }
循环优化
在预览版 7 中,我们对循环优化进行了多项改进。
• PR #71184 加强了对循环表的检查,以便更好地检查循环完整性,如 #71084 中所述。
• PR #71868 不要在循环周围压缩块
• PR #71659 在非轮廓方法中调整具有轮廓内循环的块的权重
• PR #71504 循环提升的改进
• PR #70271 优化多维数组访问。 它将延迟提高了 67%(性能链接)。
此外,在 PR #71236 中为异常处理 函数启用了热/冷拆分。
本文来自博客园,作者:一事冇诚,转载请注明原文链接:https://www.cnblogs.com/ysmc/p/16709631.html