.NET 7 预览版 7

点击上方蓝字

关注我们

(本文阅读时间:12分钟)

今天我们发布了 .NET 7 预览版 7。这是 .NET 7 的最后一个预览版,下一个版本将是我们的第一个候选版本 (RC)。.NET Conf 2022 的日期已经公布!请于 2022 年 11 月 8 日至 10 日加入我们一起庆祝 .NET 7 的发布!

Visual Studio 2022 17.3 也在今天发布,对 .NET 多平台应用程序 UI (MAUI) 提供 GA 支持。阅读 .NET MAUI 公告并收听 .NET Conf:关注MAUI直播!

此 .NET 7 预览版包括对 System.LINQ、Unix 文件权限、低级结构、p/Invoke 源代码生成、代码生成和 websocket 的改进。

您可以下载适用于 Windows、macOS 和 Linux 的 .NET 7 预览版7。

  • 安装程序和二进制文件

  • 容器镜像

  • Linux 软件包

  • 发行说明

  • 已知的问题

  • GitHub 问题跟踪器

.NET 7 预览版 7 已使用 Visual Studio 17.4 预览版 1 进行了测试。如果您想在 Visual Studio 系列产品中试用 .NET 7,我们建议您使用预览频道版本。如果您使用的是 macOS,我们建议使用最新的 Visual Studio 2022 for Mac 预览版。现在,让我们了解一下此版本中的一些最新更新。

  • .NET Conf 2022:

    https://www.dotnetconf.net/

  • .NET MAUI 公告:

    https://devblogs.microsoft.com/dotnet/dotnet-maui-visualstudio-2022-release/?ocid=AID3045631

  • .NET Conf:关注MAUI:

    https://focus.dotnetconf.net/

  • .NET 7 预览版7:

    https://dotnet.microsoft.com/zh-cn/download/dotnet/7.0?ocid=AID3045631

  • 安装程序和二进制文件:

    https://dotnet.microsoft.com/zh-cn/download/dotnet/7.0?ocid=AID3045631

  • 容器镜像:

    https://mcr.microsoft.com/catalog?search=dotnet/

  • Linux 软件包:

    https://github.com/dotnet/core/blob/master/release-notes/7.0/

  • 发行说明:

    https://github.com/dotnet/core/tree/master/release-notes/7.0

  • 已知的问题:

    https://github.com/dotnet/core/blob/main/release-notes/7.0/known-issues.md

  • GitHub 问题跟踪器:

    https://github.com/dotnet/core/issues

  • 预览频道版本:

    https://visualstudio.microsoft.com/vs/preview/

  • Visual Studio 2022 for Mac 预览版:

    https://visualstudio.microsoft.com/vs/mac/preview/

20657d32964900ba139a2ab82cbda88d.png

使用 System.LINQ 简化排序

4d5278bbfdb3276b9608f6cd72caf6eb.png

dotnet/runtime#67194

  • https://github.com/dotnet/runtime/issues/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();

7eb50b2b48e83c130153048a9fe9381c.png

支持 Unix 文件模式

9624e4938fdcce8c9a393be194527446.png

dotnet/runtime PR#69980

  • https://github.com/dotnet/runtime/pull/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 的长期贡献者,他提出、设计和实现了这个功能。

  • 所有新的 Unix 文件模式 API:

    https://github.com/dotnet/runtime/pull/69980/files#diff-cec8e6f471b4193246bdc0107b0dd7cbe131fb7fd189b288b37269c333d1171d

  • @tmds:

    https://github.com/tmds

a07fa72d9c022f6c04a8e9a3f064d6a3.png

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

7b44e2e12c0fbdff0f081b214d1b72e2.png

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

  • ByRefLike:

    https://docs.microsoft.com/dotnet/api/system.type.isbyreflike?ocid=AID3045631

  • 低级结构改进:

    https://github.com/dotnet/csharplang/blob/main/proposals/low-level-struct-improvements.md

139da418fddeaa2799f8f0d56a18f01a.png

LibraryImport P/Invoke 源生成器

2a3c37ecb70d83a489ec93b594f04bee.png

dotnet/runtime#60595

  • https://github.com/dotnet/runtime/issues/60595

LibraryImport 源生成器现在以受支持的方式提供给所有用户。超过18个月的努力,这个源生成器被设计成大多数DllImport使用的直接替代品,无论是在运行时产品和用户代码中。.NET 库都采用了 LibraryImport,并且自 .NET 7 预览版 1 以来一直附带源代码生成的编组代码。

源代码生成器随 .NET 7 TFM 一起提供,可随时使用。为了获得源生成编组的好处,请将 DllImport 的用法替换为 LibraryImport。有分析器和固定器可以帮助完成这个过程。

  • .NET 7 预览版 1:

    https://github.com/dotnet/core/issues/7106#issuecomment-1021816362

▌用法

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 添加到您的编辑器配置文件以启用转换分析器作为诊断。

有关编组自定义类型的设计文档和详细信息可以在这里找到。

  • https://github.com/dotnet/runtime/tree/main/docs/design/libraries/LibraryImportGenerator

7ac3757d1021e2ed17e4898051bc9dde.png

ClientWebSocket 升级响应详细信息

689fc27d73595b246595c91af29f8b2d.png

dotnet/runtime#25918

  • https://github.com/dotnet/runtime/issues/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);}
}

1b77650fa5ceb16897a100b25ff3d865.png

CodeGen 的改进

3352aa048f73e74a5ef7aac9e6a001fc.png

非常感谢JIT社区贡献者对这些社区PR的贡献!

  • @MichalPetryka 修复了 PR #71633 中的问题 #71632 使 getTypeForPrimitiveValueClass 将不同的符号视为不同的类型。

  • @shushanhf 在 LoongArch64 中做了 2 个修复。

  • @singleaccretion 在 预览版 7 期间做出了 20 项 PR 贡献。

  • @SkiFoD 如果参数之一是常量,则优化为使用 Min/Max 内部函数 (PR #69434)。

  • 对于 Arm664,@a74nh 在 PR #71616 中实现了 #67894 的第一部分,它为条件比较和选择指令生成 csel 和 ccmp(问题 #55364)。

  • @MichalPetryka:

    https://github.com/MichalPetryka

  • PR #71633 :

    https://github.com/dotnet/runtime/pull/71633

  • #71632 :

    https://github.com/dotnet/runtime/issues/71632

  • @shushanhf :

    https://github.com/shushanhf

  • 2 个修复:

    https://github.com/dotnet/runtime/pulls?q=is%3Apr+is%3Aclosed+label%3Aarea-CodeGen-coreclr+closed%3A2022-06-23..2022-07-11+author%3Ashushanhf+

  • @singleaccretion :

    https://github.com/singleaccretion

  • 20 项 PR 贡献:

    https://github.com/dotnet/runtime/pulls?q=is%3Apr+is%3Aclosed+label%3Aarea-CodeGen-coreclr+closed%3A2022-06-23..2022-07-11+author%3Asingleaccretion+

  • @SkiFoD :

    https://github.com/SkiFoD

  • PR #69434:

    https://github.com/dotnet/runtime/pull/69434

  • @a74nh:

    https://github.com/a74nh

  • PR #71616 :

    https://github.com/dotnet/runtime/pull/71616

  • #67894:

    https://github.com/dotnet/runtime/pull/67894

  • #55364:

    https://github.com/dotnet/runtime/issues/55364

7eaff965de97b3d1b9769345ef5772cb.png

循环优化

e9e647f2b0ee5dc88388a67ce0060ca4.png

在预览版 7 中,我们对循环优化进行了多项改进。

  • PR #71184 加强了对循环表的检查,以便更好地检查循环完整性,如 #71084 中所述。

  • PR #71868 不要在循环周围压缩块

  • PR #71659 在非轮廓方法中调整具有轮廓内循环的块的权重

  • PR #71504 循环提升的改进

  • PR #70271 优化多维数组访问。它将延迟提高了 67%(性能链接)。

此外,在 PR #71236 中为异常处理 函数启用了热/冷拆分。

  • PR #71184 :

    https://github.com/dotnet/runtime/pull/71184

  • #71084:

    https://github.com/dotnet/runtime/issues/71084

  • PR #71868:

    https://github.com/dotnet/runtime/pull/71868

  • PR #71659:

    https://github.com/dotnet/runtime/pull/71659

  • PR #71504:

    https://github.com/dotnet/runtime/pull/71504

  • PR #70271:

    https://github.com/dotnet/runtime/pull/70271

  • 性能链接:

    https://github.com/dotnet/perf-autofiling-issues/issues/6721

  • PR #71236:

    https://github.com/dotnet/runtime/pull/71236

7c2c1fefad0b4285f07f6229069cb631.png

贡献者聚光灯:Hugh Bellamy

4d65d6937562d4fe7ebfe0e566176f79.png

非常感谢我们所有的社区成员。我们非常感谢您的周到贡献。我们请贡献者@hughbe 分享他的想法。

d97470b237e069a53be42fd344ce7c24.png

Hugh Bellamy

我开发的第一个应用程序是在我十几岁的时候。尽管“Hughser”,一个围绕 WebBrowser 组件的 C# 包装器,很遗憾没有赢得浏览器大战,但 .NET 是我进入软件开发世界的第一个窗口。在为 iOS 开发应用程序几年后,当 roslyn、corefx 和 coreclr 开源时,我重新对 .NET 产生了兴趣。我很高兴有机会深入黑匣子,看看我使用的 SDK 是如何工作的。我在 2015 年 11 月的第一个 PR 是清理并添加 System.String 上各种方法的测试。(任何看过我的贡献历史的人都很清楚,清理,改进和添加测试成为我的专长!)。我很快就获得了贡献的信心,并成为 .NET 开源最活跃的贡献者之一。我现在为各种 .NET Foundation 项目做出了贡献,包括 corefx/coreclr/runtime、roslyn、xunit、mono、wpf 和 winforms。我贡献的一个亮点绝对是当我被微软飞往西雅图参加2019年微软Build大会时,与团队见面并在.NET Keynote上大声疾呼!由于我的贡献,我还连续三次获得微软MVP奖,我为此感到非常自豪。

过去,我对 .NET 的贡献帮助我在青少年时期获得了作为初级开发人员的实习机会。我目前是一名专门从事金融服务数据和分析的管理顾问。虽然现在我的时间比在中学和大学的时间少,但我仍然非常关注 .NET 开源生态系统,并在 GitHub 上以 @hughbe 用户名维护了几个 .NET 开源项目。编码和开源一直是我的爱好,也是我喜欢与我的工作相结合的东西。.作为一名政治学本科生,我对如何在政治和社会环境中使用技术感兴趣。例如,作为柬埔寨一家非政府组织的实习生,我在 .NET 中开发了一个 Facebook 抓取平台,其中部分内容是我开源的。

为 .NET 做贡献是一次不可思议的经历——在我十几岁的时候,我几乎每天都在与从未谋面的人远程工作。微软 的团队和开源社区的其他成员都非常乐于助人、富有洞察力并且乐于接受挑战。有很多方法可以开始,无论是提交还是审查问题、文档和 PR,所以今天就开始吧!

  • @hughbe:

    https://github.com/hughbe

  • 提交还是审查问题:

    https://github.com/dotnet/runtime/issues

  • 今天就开始吧:

    https://github.com/dotnet/runtime/blob/main/CONTRIBUTING.md

03e1d24a42d2c1569f3f8325a8e168da.png

面向 .NET 7

44d4d826bb7004b5dcdb966ce627b01f.png

若要面向 .NET 7,您需要在项目文件中使用 .NET 7 目标框架名字对象(TFM)。例如:

<TargetFramework>net7.0</TargetFramework>

以下是全套 .NET 7 TFM,包括特定于操作的 TFM。

  • net7.0

  • net7.0-android

  • net7.0-ios

  • net7.0-maccatalyst

  • net7.0-macos

  • net7.0-tvos

  • net7.0-windows

我们希望很简单的从 .NET 6 升级到 .NET 7 。请报告您在使用 .NET 7 测试现有应用程序的过程中发现的任何重大更改。

2ae61029fe4ec71d4ec2d3f4f614942b.png

支持

05345e2d94f3b3b0f089cc15dad4748b.png

.NET 7 是一个短期支持 (STS) 版本,这意味着它将在发布之日起 18 个月内获得免费支持和补丁。请务必注意,所有版本的质量都是相同的。唯一的区别是支持的长度。有关 .NET 支持政策的更多信息,请参阅 .NET 和 .NET Core 官方支持政策。

我们最近将“当前”名称更改为“短期支持 (STS)”。我们正在推出这一变化。

  • .NET 和 .NET Core 官方支持政策:

    https://dotnet.microsoft.com/platform/support/policy/dotnet-core?ocid=AID3045631

  • 推出这一变化:

    https://github.com/dotnet/core/pull/7517

bd9b63ce8696e217748e06007f39766d.png

重大更改

1cea401531171597c8a8f0c90a9c526e.png

▌修剪和本机AOT:默认情况下修剪所有程序集

为了更好地满足用户期望并生成更小、更高效的应用程序,默认情况下,修剪现在会修剪控制台应用中的所有程序集。此更改仅影响使用 PublishTrimmed=true 发布的应用程序,并且仅影响具有现有修剪警告的应用程序。它也只影响不使用 Windows 桌面、Android、iOS、WASM 或 ASP.NET SDK 的普通 .NET 应用程序。

▌以前的行为

以前,只有在库项目文件中选择加入 <IsTrimmable>true</IsTrimmable> 的程序集才会被修剪。

▌新行为

从 .NET 7 开始,默认情况下,修整会修整应用中的所有程序集。以前可能使用 PublishTrimmed 的应用程序可能无法在 .NET 7 中运行。但是,只有带有修剪警告的应用程序会受到影响。如果您的应用没有修剪警告,则行为更改不应造成任何不利影响,并且可能会减小应用大小。

例如,使用 Newtonsoft.Json 或 System.Text.Json 而不生成源代码的应用程序在用户项目中序列化和反序列化某个类型可能在更改之前已经运行,因为用户项目中的类型已完全保留。但是,将存在一个或多个修剪警告(警告代码 ILxxxx)。现在,用户项目中的类型被修剪,序列化可能会失败或产生意外的结果。

如果您的应用确实有修剪警告,您可能会看到行为更改或异常。例如,使用 Newtonsoft.Json 或 System.Text.Json 而不生成源代码的应用程序在用户项目中序列化和反序列化某个类型可能在更改之前已经运行,因为用户项目中的类型已完全保留。但是,将存在一个或多个修剪警告(警告代码 ILxxxx)。现在,用户项目中的类型被修剪,序列化可能会失败或产生意外的结果。

▌建议的操作

最佳的解决方案是解决应用程序中的所有修剪警告。若要还原到以前的行为,请将 TrimMode 属性设置为 partial,这是 .NET 7 之前的行为。

<TrimMode>partial</TrimMode>

默认的.NET 7+ 值为 full:

<TrimMode>full</TrimMode>

639080fecbbdeadeaae2c2db59e98b34.png

其他重大更改

e48a423344e90aed522d3f11e8f8fcc6.png

您可以通过阅读 .NET 7 中的重大更改文档找到最新的 .NET 7 重大更改列表。它按区域和版本列出了重大更改,并附有详细说明的链接。

若要查看提出了哪些重大更改但仍在审核中,请关注 Proposed .NET Breaking Changes GitHub 问题。

  • .NET 7 中的重大更改:

    https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/7.0?ocid=AID3045631

  • Proposed .NET Breaking Changes GitHub 问题:

    https://github.com/dotnet/core/issues/7131

bec52de76e28637fa25eb6577dac0432.png

路线图

d16c43b7b5c130a56882900100988bbb.png

.NET 的发行版包括产品、库、运行时和工具,并表示 Microsoft 内部和外部多个团队之间的协作。您可以通过阅读产品路线图了解有关这些方面的更多信息:

  • ASP.NET Core 7 和 Blazor 路线图:

    https://github.com/dotnet/aspnetcore/issues/39504

  • EF 7 路线图:

    https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/plan?ocid=AID3045631

  • ML.NET:

    https://github.com/dotnet/machinelearning/blob/main/ROADMAP.md

  • .NET MAUI:

    https://github.com/dotnet/maui/wiki/Roadmap

  • WinForms:

    https://github.com/dotnet/winforms/blob/main/docs/roadmap.md

  • WPF:

    https://github.com/dotnet/wpf/blob/main/roadmap.md

  • NuGet:

    https://github.com/NuGet/Home/issues/11571

  • Roslyn:

    https://github.com/dotnet/roslyn/blob/main/docs/Language Feature Status.md

  • Runtime:

    https://github.com/dotnet/core/blob/main/roadmap.md

cc06314f758546d3cc95a9d549a1ea56.gif

我们感谢您对 .NET 的所有支持和贡献。请尝试使用.NET 7预览版 7 并告诉我们您的想法!

  • 感谢:

    https://dotnet.microsoft.com/zh-cn/thanks?ocid=AID3045631

  • 尝试使用.NET 7预览版7:

    https://dotnet.microsoft.com/zh-cn/download/dotnet/7.0?ocid=AID3045631

c22a0129f0ebcec09293479e797baf53.png

前往查看.NET 7 预览版7,以及进行相关程序下载安装。

5db7e783819c3e38b464dfaacffbb0af.png

长按识别二维码

9484c19c1ee8f58e6f47dec0104732ba.gif

点击「阅读原文」查看.NET 7 预览版7~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android--------volley之网络请求和图片加载

为什么80%的码农都做不了架构师&#xff1f;>>> Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架。 Volley的特性 封装了的异步的请求API。Volley 中大多是基于接口的设计&#xff0c;可配置性强。一个优雅和稳健的请求队列&#xff0c;一定程度符…

经典算法学习——冒泡排序

冒泡排序是我们学习的第一种排序算法。应该也算是最简单、最经常使用的排序算法了。无论怎么说。学会它是必定的。今天我们就用C语言来实现该算法。演示样例代码已经上传至&#xff1a;https://github.com/chenyufeng1991/BubbleSort算法描写叙述例如以下&#xff1a;&#xff…

Mybatis之设计模式之装饰者模式

了解&#xff0c;什么是装饰者模式? 1.定义 装饰模式是在不必改变原类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象。 2.特点 1 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真…

一天掌握Android JNI本地编程 快速入门

一、JNI&#xff08;Java Native Interface&#xff09; 1、什么是JNI&#xff1a;JNI(Java Native Interface):java本地开发接口JNI是一个协议&#xff0c;这个协议用来沟通java代码和外部的本地代码(c/c) 外部的c/c代码也可以调用java代码2、为什么使用JNI&#xff1a;效率上…

[转]CentOS 7忘记root密码解决办法

转自&#xff1a;http://www.linuxidc.com/Linux/2016-08/134034.htm 亲测可用&#xff01; CentOS 7 root密码的重置方式和CentOS 6完全不一样&#xff0c;CentOS 7与之前的版本6变化还是比较大的&#xff0c;以进入单用户模式修改root密码为例。 1.重启开机按esc 2.按e 3.编…

美链BEC合约漏洞技术分析

这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈。这篇文章就来分析下BEC智能合约的漏洞 <!-- more --> 漏洞攻击交易 我们先来还原下攻击交易&#xff0c;这个交易可以在这个链接查询到。我截图给大家看一下&#xff1a; 攻击者向两个账号转…

vue 公众号扫描_vue编写微信公众号打开相机功能

vue编写微信公众号打开相机功能&#xff0c;什么都不多说直接上代码页面布局代码class"previewer-demo-img":key"index":src"item.src"width"100"click"previewImg(index)">1.微信config初始化前端代码initWxConfig() {l…

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能&#xff0c;简短的内容&#xff0c;深入的理解&#xff0c;Always to review the basics。 NOT IN、NOT EXISTS、LEFT JOIN...IS NULL性能分析 我们首先创建测试表 USE TSQL2012 GOCREATE SCHEMA [c…

global using 的另类用法

前言global using 指令在 C# 10 中被引入&#xff0c;意味着 using 将应用于编译中的所有文件&#xff08;通常是一个项目&#xff09;。比如&#xff1a;global using System.Text;则在同一项目的其他位置&#xff0c;可以直接使用 System.Text 下的所有类型而无需再次声明 us…

利用 Node.js 实现 SAP Hana 数据库编程接口

为什么80%的码农都做不了架构师&#xff1f;>>> 自 SAP HANA SP 11 之后&#xff0c;可以使用 Node.js 作为 Hana 的编程接口。SAP 将 Application server 简称为 XS。现在 XS 已经演化为 Advanced 版本。为了区别&#xff0c;早期的 XS 被称为 XS Classical。 从下…

WPF 实现自绘验证码

WPF 实现自绘验证码控件名&#xff1a;VerifyCode作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;如何通过DrawingV…

css中的单位换算_CSS单位px、em、rem及它们之间的换算关系

作者:WangMin格言:努力做好自己喜欢的每一件事国内的设计师大都喜欢用px&#xff0c;而国外的网站大都喜欢用em和rem&#xff0c;那么三者的区别与优势是什么&#xff1f;接下来我们就来学习一下吧&#xff01;单位px、em、rem分别表示什么&#xff1f;1、 px(Pixel) 相对于显示…

【MAC】Ncnn 编译so文件方案

【MAC】Ncnn 编译so文件方案 1、下载ncnn github地址是&#xff1a;https://github.com/Tencent/ncnn 指定目录&#xff1a;在终端或者git管理工具 输入&#xff1a;git clone https://github.com/Tencent/ncnn.git 2、编译Ncnn 2.1 Mac平台 安装cmake、wget&#xff08;根据实…

SSM学习注意杂记

2019独角兽企业重金招聘Python工程师标准>>> 1.spring导包时一定要版本对应&#xff0c;最好不要导不同版本的包&#xff0c;还有mybatis的包&#xff0c;springmvc的包&#xff0c;三个框架的包都需配套&#xff0c;要不然会出现一些想象不到的错误。 2.mybatis写映…

《ASP.NET Core 6框架揭秘》实例演示[15]:针对控制台的日志输出

针对控制台的ILogger实现类型为ConsoleLogger&#xff0c;对应的ILoggerProvider实现类型为ConsoleLoggerProvider&#xff0c;这两个类型都定义在 NuGet包“Microsoft.Extensions.Logging.Console”中。ConsoleLogger要将一条日志输出到控制台上&#xff0c;首选要解决的是格式…

《HeadFirst Python》第一章学习笔记

对于Python初学者来说&#xff0c;舍得强烈推荐从《HeadFirst Python》开始读起&#xff0c;这本书当真做到了深入浅出&#xff0c;HeadFirst系列&#xff0c;本身亦是品质的保证。这本书舍得已在《Python起步&#xff1a;写给零编程基础的童鞋》一文中提供了下载。为了方便大家…

Oracle-13:Oracle中的表分区

------------吾亦无他,唯手熟尔&#xff0c;谦卑若愚&#xff0c;好学若饥------------- 本篇博客记录了表分区 表分区的含义&#xff1a; 典型的拿空间换时间的案例&#xff01; 表分区对一张表进行分区&#xff0c;分区之后表中的数据存在相对应的分区内&#xff08;可以是不…

js控制图像等比例缩放

<!DOCTYPE html> <html> <head><title>图片内部放大效果</title> <meta charset"utf-8"> <style type"text/css">#imgborder{ width: 200px;height: 160px;border: 3px solid #000; overflow: hidden;position:…

mysql一张表最多多少索引_MySQL一个索引最多有多少个列?真实的测试例子

MySQL一个索引最多有多少个列&#xff1f;真实的测试例子更新时间&#xff1a;2009年07月01日 22:22:21 作者&#xff1a;MySQL一个索引最多有多少个列&#xff1f;下面是具体的实现代码。最多16列。create table test (f1 int,f2 int,f3 int,f4 int,f5 int,f6 int,f7 int,f8…

.NET Core 使用 LibreOffice 实现 Office 预览(Docker 部署)

前些年做云盘产品的时候&#xff0c;一个很核心的功能就是 Office 文件预览&#xff0c;当时还没有使用 .NET Core ,程序部署在 Windows Server 服务器上&#xff0c;文件预览的方案采用了微软的 OWA 。目前在做的零代码产品中的表单附件控件&#xff0c;同样面临着 Office 文件…