.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 简化排序

dotnet/runtime#67194

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 文件模式

dotnet/runtime PR#69980

  以前,.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);

查看所有新的 Unix 文件模式 API。

非常感谢 @tmds,他是 Red Hat 的长期贡献者,他提出、设计和实现了这个功能。

低级结构改进:ref 字段支持

  .NET 7 运行时现在完全支持 ByRefLike 类型(即 ref struct)中的 ref 字段。 在这个备受期待的功能背后有广泛的语言设计,用户可以阅读:低级结构改进。 借助此功能,以前需要在运行时进行专门处理的类型(例如,Span<T> 和 ReadOnlySpan<T>)现在可以在 C# 中完全实现。

LibraryImport P/Invoke 源生成器

dotnet/runtime#60595

  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 升级响应详细信息

dotnet/runtime#25918

  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

随机推荐

  1. 不要让Microsoft edge 打开IE浏览器的设置(兼容性问题)

    1打开Microsoft edge 2 打开设置 3 搜索栏搜索IE,打开即可

  2. SpringBoot自定义starter开发分布式任务调度实践

    概述 需求 在前面的博客<Java定时器演进过程和生产级分布式任务调度ElasticJob代码实战>中,我们已经熟悉ElasticJob分布式任务的应用,其核心实现为elasticjob- ...

  3. Jenkins安装推荐插件前,更换插件源

    网上找了很多都解决不了问题,直到看到jenkins-update-center,还有一个问题,就是尽量在实体机上装,感觉docker坑太多.... 安装jenkins,以Debian系为例 安装包在这 ...

  4. 索尼笔记本Linux系统唤醒后,键盘无法使用

    1.编辑grub文件 sudo gedit /etc/default/grub 2.修改成以下参数 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i804 ...

  5. HMS Core安全检测服务如何帮助大学新生防范电信诈骗?

    一年一度的高考结束了,很多学生即将离开父母,一个人踏入大学生活,但由于人生阅历较少,容易被不法分子盯上. 每年开学季也是大一新生遭受诈骗的高峰期,以下是一些常见的案例.有的骗子会让新生下载注册一些恶意 ...

  6. 基于ABP实现DDD--仓储实践

      由于软件系统中可能有着不同的数据库,不同的ORM,仓储思想的本质是解耦它们.在ABP中具体的实现仓储接口定义在领域层,实现在基础设施层.仓储接口被领域层(比如领域服务)和应用层用来访问数据库,操作 ...

  7. AtCoder Beginner Contest 249 F - Ignore Operations // 贪心 + 大根堆

    传送门:F - Keep Connect (atcoder.jp) 题意: 给定长度为N的操作(ti,yi). 给定初值为0的x,对其进行操作:当t为1时,将x替换为y:当t为2时,将x加上y. 最多 ...

  8. 【PMP学习笔记】第1章 PMP体系引论

    一.什么是项目? 项目是为创造独特的产品.服务或成果而进行的临时性工作. 项目管理是把事办成的方法论,万物皆可项目. 项目的特性 临时性:有明确的"起"和"止" ...

  9. SpringCloud微服务实战——搭建企业级开发框架(四十四):【微服务监控告警实现方式一】使用Actuator + Spring Boot Admin实现简单的微服务监控告警系统

      业务系统正常运行的稳定性十分重要,作为SpringBoot的四大核心之一,Actuator让你时刻探知SpringBoot服务运行状态信息,是保障系统正常运行必不可少的组件.   spring-b ...

  10. 清北学堂 2020 国庆J2考前综合强化 Day3

    目录 1. 题目 T1 石头剪刀布 题目描述 Sol T2 铺地毯 题目描述 Sol T3 数列游戏 题目描述 Sol T4 数星星 题目描述 Sol 2. 算法 -- 动态规划 1. 概述 2. 线 ...