.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 中为异常处理 函数启用了热/冷拆分。
随机推荐
- 【Java面试】RDB 和 AOF 的实现原理、优缺点
Hi,大家好,我是Mic. 一个工作了5年的粉丝私信我,最近面试碰到很多Redis相关的问题. 其中一个面试官问他Redis里面的持久化机制,没有回答得很好. 希望我帮他系统回答一下. 关于Redis ...
- NC14380 位数差
NC14380 位数差 题目 题目描述 给一个数组 \({a}\) ,定义 \(h(a,b)\) 为在十进制下 \(a + b\) 与 \(a\) 的位数差,求 \(\displaystyle\sum ...
- Kingbase重新数据初始化,设置大小写
KingbaseV8数据库安装完成后,删除/opt/Kingbase/ES/V8/data下所有内容,重新在其他目录初始化数据库,设置为忽略大小写 [kingbase@dbserver bin]$ . ...
- 基于YCbCr色彩模型的简易肤色识别器
一.实验方法 实验共选取了12张图像,利用画笔工具在每幅图像上选取5个点,并分别记录RGB值.取点方式如下图所示: 总共70个点,R,G,B的值分别如下表所示: RGB色彩模型和YCbC ...
- OutputStreamWriter介绍&代码实现和InputStreamReader介绍&代码实现
java.io.OutputStreamWriter extends Writer OutputStreamWriter: 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编 ...
- 攻防世界MISC进阶区 52-55
52.Excaliflag 得到一张png,扔进stegsolve中查看,找到flag 53.Just-No-One 得到一个exe,运行后居然是一个安装程序,看了一下没什么问题,扔进ida pro中 ...
- 浏览器中的原生base64方法
在web开发中,经常涉及到对文本.文件等进行base64编码处理,在之前的开发中,使用js-base64来进行处理,但其实浏览器已经原生包含了处理方法.性能更好,兼容性也更高. atob() - AS ...
- APISpace万券齐发,API采购大放价
Eolink APISpace 是 Eolink 旗下专业的API 数据交易平台,上面拥有海量的API,开发者可以根据需求自由选择. 环境天气 全国天气预报,支持全国以及全球多个城市的天气查询,包含国 ...
- 基于NoCode构建简历编辑器
基于NoCode构建简历编辑器 基于NoCode构建简历编辑器,要参加秋招了,因为各种模版用起来细节上并不是很满意,所以尝试做个简单的拖拽简历编辑器. 描述 Github | Resume DEMO ...
- mysql主从复制学习笔记
一.musql主从复制原理 MySQL之间数据复制的基础是二进制日志文件(binary log file).一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以&q ...