在 .NET 6 Preview 3 ASP.NET Core 更新

.NET 6 Preview 3现在可用了,其中包括对ASP.NET Core的许多重大改进。

这是此预览版本中的新增功能:

  • 更小的SignalR,Blazor Server和MessagePack scripts

  • 启用 Redis 分析会话

  • HTTP/3 endpoint TLS配置

  • 初版的 .NET Hot Reload 支持

  • Razor编译器不再产生单独的Views程序集

  • IIS中的 Shadow-copy

  • SignalR C ++客户端的 Vcpkg 移植

  • 减少了空闲TLS连接的内存占用

  • SlabMemoryPool 中移除 slabs

  • WPF和WindowsForm 中的 BlazorWebView 控件

开始吧

要在.NET 6 Preview 3中开始使用ASP.NET Core,请安装.NET 6 SDK。

如果您使用的是Windows上的Visual Studio,建议安装Visual Studio 2019 16.10的最新预览版。如果您使用的是macOS,我们建议安装Visual Studio 2019 for Mac 8.10的最新预览版。

升级现有项目

要将现有的ASP.NET Core应用程序从.NET 6 Preview 2升级到.NET 6 Preview 3:

  • 将所有 Microsoft.AspNetCore.* 软件包引用更新为。6.0.0-preview.3.*

  • 将所有 Microsoft.Extensions.* 软件包引用更新为。6.0.0-preview.3.*

请参阅ASP.NET Core for .NET 6中的重大更改的完整列表。

较小的SignalR,Blazor Server和MessagePack脚本

多亏了Ben Adams的社区贡献,SignalR,MessagePack和Blazor Server脚本现在大大缩小了,下载量更小,浏览器更少的JavaScript解析和编译以及更快的启动速度。

这项工作减少了下载大小,这是非常惊人的:

library修改前修改后%????.br
signalr.min.js130 KB39 KB70%10 KB
blazor.server.js212 KB116 KB45%28 KB

现在用于MessagePack的软件包您还只需要使用 @microsoft/signalr-protocol-msgpack即可,无需引入msgpack5。这意味着你只需要一个额外的29 KB,而不是早先使用MessagePack 代替 JSON 的140 KB

缩小尺寸的方法如下:

  • 将TypeScript和依赖项更新到最新版本。

  • uglify-js切换到terser,这是webpack的默认设置,并支持更新的JavaScript语言功能(如class)。

  • 将SignalR模块标记为"sideEffects": false,这对于摇树优化更有效。

  • 放弃"es6-promise/dist/es6-promise.auto.js"polyfill。

  • 将TypeScript更改为输出es2019而不是输出es5,并放弃了“ es2015.promise”和“ es2015.iterable” polyfill。

  • 从@msgpack/msgpack移至msgpack5,因为它需要较少的polyfill,并且对TypeScript和模块更友好。

您可以在GitHub上的 Ben 的pull request找到有关这些更改的更多详细信息。

启用Redis分析会话

我们接受了Gabriel Lucaci的社区贡献,以在此预览中启用与Microsoft.Extensions.Caching.StackExchangeRedis的Redis分析会话。有关Redis分析的更多详细信息,请参见官方文档。该API可以按以下方式使用:

services.AddStackExchangeRedisCache(options =>
{options.ProfilingSession = () => new ProfilingSession();
})

HTTP / 3端点TLS配置

.NET 6对HTTP / 3的支持的工作开始加强。HTTP/ 3与现有的HTTP协议相比,具有许多优点,包括更快的连接建立和改进的低质量网络性能。

此预览中的新增功能是使用可以在单个HTTP / 3端口上配置TLS证书UseHttps。这使Kestrel的HTTP / 3端点配置与HTTP / 1.1和HTTP / 2保持一致。

.ConfigureKestrel((context, options) =>
{options.EnableAltSvc = true;options.Listen(IPAddress.Any, 5001, listenOptions =>{listenOptions.Protocols = HttpProtocols.Http3;listenOptions.UseHttps(httpsOptions =>{httpsOptions.ServerCertificate = LoadCertificate();});});
})

初版的.NET Hot Reload支持

现在,使用.NET的ASP.NET Core&Blazor项目可以使用.NET Hot Reload的早期支持dotnet watch。.NET Hot Reload会将代码更改应用于正在运行的应用程序,而无需重新启动它,也不会丢失应用程序状态。

要尝试对基于.NET 6的现有ASP.NET Core项目进行热重装,请将属性添加到launchSettings.json中的启动配置文件中。对于Blazor WebAssembly项目,请使用热重载配置文件。"hotReloadProfile": "aspnetcore"``"blazorwasm"

使用运行项目dotnet watch。输出应指示已启用热重装:

watch : Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload. Press "Ctrl + R" to restart.

如果您想在任何时候强制应用程序重新生成并重新启动,则可以通过Ctrl+R在控制台上输入来执行此操作。

您现在可以开始对代码进行编辑。保存代码更改时,适用的更改几乎立即自动热加载到正在运行的应用程序中。正在运行的应用程序中的所有应用程序状态都将保留。

hot-reload

您也可以将更改热加载到CSS文件中,而无需刷新浏览器:

css-hot-reload

.NET Hot Reload不支持某些代码更改。您可以在docs中找到受支持的代码编辑列表。对于Blazor WebAssembly,当前仅支持方法主体替换。我们正在努力扩展.NET 6中受支持的编辑集。当dotnet watch检测到无法使用热重载应用的更改时,它会退回到重建和重新启动应用程序的状态。

这只是.NET 6中热重载支持的开始。在即将发布的预览中以及在Visual Studio中集成热重载后,将很快提供对桌面和移动应用程序的热重载支持。

Razor编译器不再产生单独的Views程序集

Razor编译器以前利用两步编译过程生成了一个单独的Views程序集,其中包含在应用程序中定义的生成的视图和页面(.cshtml)。生成的类型是公共的,并且在AspNetCore名称空间下。

现在,我们更新了Razor编译器,以将视图和页面类型构建到主项目程序集中。现在,默认情况下会像在AspNetCoreGeneratedDocument命名空间中一样生成internal sealed这些类型。此更改提高了构建性能,启用了单个文件部署,并使这些类型可以参与.NET Hot Reload。

有关此更改的更多详细信息,请参阅GitHub上的相关公告。

IIS中的卷影复制(Shadow-copy)

我们在IIS的ASP.NETCore模块中添加了一项新功能,以增加对影子复制应用程序集的支持。当前,.NET在Windows上运行时会锁定应用程序二进制文件,因此在应用程序仍在运行时无法替换二进制文件。尽管我们建议仍然使用应用程序脱机文件,但我们认识到在某些情况下(例如FTP部署)不可能这样做。

在这种情况下,可以通过自定义ASP.NET Core模块处理程序设置来启用卷影复制。在大多数情况下,ASP.NET Core应用程序没有将web.config签入您可以修改的源代码控制中(它们通常由SDK生成)。您可以添加此web.config示例以开始使用。

<?xml version="1.0" encoding="utf-8"?>
<configuration><!-- To customize the asp.net core module uncomment and edit the following p. For more info see https://go.microsoft.com/fwlink/?linkid=838655 --><system.webServer><handlers><remove name="aspNetCore"/><add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModulev2" resourceType="Unspecified"/></handlers><aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"><handlerSettings><handlerSetting name="experimentalEnableShadowCopy" value="true" /><handlerSetting name="shadowCopyDirectory" value="../ShadowCopyDirectory/" /><!-- Only enable handler logging if you encounter issues--><!--<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />--><!--<handlerSetting name="debugLevel" value="FILE,TRACE" />--></handlerSettings></aspNetCore></system.webServer>
</configuration>

您需要新版本的ASP.NET Core模块才能尝试使用此功能。在自托管的IIS服务器上,这需要新版本的托管捆绑包。在Azure App Services上,将需要安装新的ASP.NET Core运行时网站扩展

ASP.NET Core运行时网站扩展

SignalR C ++客户端的Vcpkg移植

Vcpkg是用于C和C ++库的跨平台命令行软件包管理器。我们最近在vcpkg中添加了一个SignalR C ++客户端的移植,添加CMake native支持(也适用于MSBuild项目)。

您可以使用以下代码段将SignalR客户端添加到CMake项目中(假设您已经包含了vcpkg工具链文件):

find_package(microsoft-signalr CONFIG REQUIRED)
link_libraries(microsoft-signalr::microsoft-signalr)

此后,无需任何其他配置即可准备好在您的项目中使用 SignalR C ++客户端并在其中使用它。有关使用SignalR C ++客户端的C ++应用程序的完整示例,请查看此存储库。

减少了空闲TLS连接的内存占用

对于仅偶尔来回发送数据的长期运行的TLS连接,我们已大大减少了.NET 6中ASP.NET Core应用程序的内存占用。这将有助于提高WebSocket服务器等方案的可伸缩性。这主要是在System.IO.PipelinesSslStream和 Kestrel 的许多改进。让我们看一下促成这种情况的一些改进:

减小System.IO.Pipelines.Pipe的大小

对于我们建立的每个连接,我们在Kestrel中分配两个管道:一个从传输层到请求的应用程序,另一个从应用程序层到响应的传输。通过将System.IO.Pipelines.Pipe大小从368个字节缩小到264个字节(〜28.2%),我们为每个连接节省了208个字节(每个管道104个字节)。

池化 SocketSender

SocketSender对象(该子类SocketAsyncEventArgs)在运行时约为350个字节。我们可以合并它们SocketSender,而不是为每个连接分配新的对象,因为发送通常非常快,并且我们可以减少每个连接的开销。现在,我们只为每个连接支付350个字节IOQueue(每个队列一个,以避免争用),而不是为每个连接支付350个字节。在具有5000个空闲连接的WebSocket服务器中,我们从分配〜1.75 MB(350字节* 5000)到现在只为SocketSender对象分配〜2.8kb(350字节* 8)。

零字节读取 SslStream

无缓冲读取是一种我们已经在ASP.NET Core中采用的技术,如果套接字上没有可用数据,则可以避免从内存池中租用内存。在进行此更改之前,具有5,000个空闲连接的WebSocket服务器需要200兆字节(不带TLS)的数据,而使用TLS则需要800兆字节。其中一些分配(每个连接4k)来自Kestrel,必须在等待对SslStream的读取完成时保留ArrayPool缓冲区。假设这些连接处于空闲状态,则读取操作均不会完成,并将其缓冲区返回给ArrayPool,从而迫使ArrayPool分配更多的内存。剩下的分配SslStream本身就是:用于TLS握手的4k缓冲区和用于正常读取的32k缓冲区。在Preview3中,当用户在SslStream上执行零字节读取并且没有可用数据时,SslStream将在内部对基础包装的流执行零字节读取。在最佳情况下(空闲连接),这些更改导致每个连接节省40 Kb,同时仍然允许在数据可用时通知使用者(Kestrel),而无需保留任何未使用的缓冲区。

零字节读取 PipeReader

一旦SslStream支持了无缓冲读取,我们便添加了对零字节读取的选项StreamPipeReader,该内部类型将a适配Stream为a PipeReader。在Kestrel中,我们使用aStreamPipeReader将基础适应SslStream为a PipeReader,并且有必要在上公开这些零字节读取语义PipeReader

现在,您可以创建一个PipeReader支持零字节读取在任何底层Stream支持零字节读取语义(例如,。SslStreamNetworkStream使用下面的API等):

var reader = PipeReader.Create(stream, new StreamPipeReaderOptions(useZeroByteReads: true));

SlabMemoryPool 中移除 slabs

为了减少堆的碎片,Kestrel采用了一项技术,在该技术中分配了128 KB的内存作为其内存池的一部分。然后将这些 slabs 进一步划分为4 KB的块,供Kestrel在内部使用。平板必须大于85 KB,以强制在大对象堆上进行分配,以尝试防止GC重新定位此数组。但是,随着新一代GC(固定对象堆(POH))的引入,在 slabs 上分配块不再有意义。在preview3中,我们现在直接在POH上分配块,从而降低了管理我们自己的内存池所涉及的复杂性。此更改将使将来的改进变得更容易,例如使Kestrel所使用的内存池更容易收缩。

WPF和WindowsForms的BlazorWebView 控件

对于.NET 6,我们添加了对使用.NET MAUI和Blazor构建跨平台混合桌面应用程序的支持。混合应用程序是利用Web技术实现其功能的本机应用程序。例如,混合应用程序可能使用嵌入式Web视图控件来呈现Web UI。这意味着您可以使用HTML和CSS等网络技术编写应用程序UI,同时还可以利用本机设备功能。我们将在即将发布的.NET 6预览版中引入对使用.NET MAUI和Blazor构建混合应用程序的支持。

在此版本中,我们引入了BlazorWebView用于WPF和Windows Forms应用程序的控件,这些控件允许将Blazor功能嵌入到基于.NET 6的现有Windows桌面应用程序中。使用Blazor和混合方法,您可以开始将UI投资与WPF和Windows Forms脱钩。这是一种现代化现有桌面应用程序的好方法,可以将其引入.NET MAUI或在网络上使用。您可以使用Blazor对现有的Windows Forms和WPF应用程序进行现代化改造,同时利用现有的.NET投资。

要使用新BlazorWebView控件,首先需要确保已安装WebView2。

要将Blazor功能添加到现有的Windows Forms应用程序中,请执行以下操作:

  • 将Windows Forms应用更新为目标.NET 6。

  • 将应用程序项目文件中使用的SDK更新为Microsoft.NET.Sdk.Razor

  • 添加对Microsoft.AspNetCore.Components.WebView.WindowsForms的包引用。

  • 将以下wwwroot / index.html文件添加到项目中,用实际的项目名称替换:{PROJECT NAME}

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /><title>Blazor app</title><base href="/" /><link href="{PROJECT NAME}.styles.css" rel="stylesheet" /><link href="app.css" rel="stylesheet" />
</head><body><div id="app"></div><div id="blazor-error-ui">An unhandled error has occurred.<a href="" class="reload">Reload</a><a class="dismiss">????</a></div><script src="_framework/blazor.webview.js"></script>
</body>
</html>
  • 将以下具有一些基本样式的app.css文件添加到wwwroot文件夹:

html, body {font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}.valid.modified:not([type=checkbox]) {outline: 1px solid #26b050;
}.invalid {outline: 1px solid red;
}.validation-message {color: red;
}#blazor-error-ui {background: lightyellow;bottom: 0;box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);display: none;left: 0;padding: 0.6rem 1.25rem 0.7rem 1.25rem;position: fixed;width: 100%;z-index: 1000;
}#blazor-error-ui .dismiss {cursor: pointer;position: absolute;right: 0.75rem;top: 0.5rem;}
  • 对于wwwroot文件夹中的所有文件,将“复制到输出目录”属性设置为“如果较新则复制”

  • 将根Blazor组件Counter.razor添加到项目中:

@using Microsoft.AspNetCore.Components.Web<h1>Counter</h1><p>The current count is: @currentCount</p>
<button @onclick="IncrementCount">Count</button>@code {int currentCount = 0;void IncrementCount(){currentCount++;}
}
  • BlazorWebView控件添加到所需的表单以呈现根Blazor组件:

var serviceCollection = new ServiceCollection();
serviceCollection.AddBlazorWebView();
var blazor = new BlazorWebView()
{Dock = DockStyle.Fill,HostPage = "wwwroot/index.html",Services = serviceCollection.BuildServiceProvider(),
};
blazor.RootComponents.Add<Counter>("#app");
Controls.Add(blazor);
  • 运行该应用程序以查看您BlazorWebView的操作:

Blazor Windows表单

要将Blazor功能添加到现有WPF应用程序中,请按照Windows窗体应用程序上面列出的相同步骤进行操作,但以下步骤除外:

  • 替换Microsoft.AspNetCore.Components.WebView.Wpf的程序包引用

  • BlazorWebView在XAML中添加控件:

<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp1"xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Wpf;assembly=Microsoft.AspNetCore.Components.WebView.Wpf"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><blazor:BlazorWebView HostPage="wwwroot/index.html" Services="{StaticResource services}"><blazor:BlazorWebView.RootComponents><blazor:RootComponent Selector="#app" ComponentType="{x:Type local:Counter}" /></blazor:BlazorWebView.RootComponents></blazor:BlazorWebView></Grid>
</Window>
  • 将服务提供者设置为静态资源:

var serviceCollection = new ServiceCollection();
serviceCollection.AddBlazorWebView();
Resources.Add("services", serviceCollection.BuildServiceProvider());
  • 要解决WPF运行时内部版本找不到Razor组件类型的问题,请在Counter.razor.cs中为该组件添加一个空的部分类:

public partial class Counter { }
  • 构建并运行基于Blazor的WPF应用程序:

Blazor WPF

给予反馈

我们希望您喜欢.NET 6中的ASP.NET Core预览版。我们希望听到您使用此版本的体验。可以通过在GitHub上提交问题,让我们知道您的想法。

感谢您试用ASP.NET Core!

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

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

相关文章

趣图:程序员桌面对比,iOS vs 安卓

程序员桌面对比&#xff0c;iOS vs 安卓↓↓↓数据与算法之美用数据解决不可能长按扫码关注

如何在 ASP.Net Core 中使用 HTTP.sys WebServer ?

ASP.Net Core 是一个开源的&#xff0c;跨平台的&#xff0c;轻量级模块化框架&#xff0c;可用它来构建高性能的Web程序&#xff0c;大家都知道 Kestrel 是 ASP.Net Core 内置的跨平台web服务器&#xff0c;但是它有一定的局限性&#xff0c;比如不支持 端口共享 , WebSockets…

百度移动联盟(munion)-广告平台投放流程详细介绍 (绿色通道)

1. 百度平台官网介绍&#xff1a; http://hi.baidu.com/mobads/blog/ ... 1c7fc3bc3e1e2e.html2. AdView 官网介绍&#xff1a; 为开发者提供“AdView-百度” 绿色通道审核&#xff1b;提供除百度分成外额外AdView渠道分成&#xff1b;赚取更多&#xff0c;更稳定的广告费用&a…

从一个骗局谈生活中的基础算法

曾经有一个著名的骗局&#xff1a;小明是一个赌马爱好者&#xff0c;最近他连续几次提前收到了预测赌马结果的邮件&#xff0c;从一开始由于不屑而错失良机&#xff0c;到渐渐深信不疑&#xff0c;直到最后给邮件发送方汇了巨款才发现上当。看过这个的人应该知道&#xff0c;骗…

用得最多的冒泡排序是不是少了个关键点?

前言冒泡排序应该是很多小伙伴的最爱&#xff0c;简单、直接、好理解&#xff1b;回顾以往参与和阅读的项目&#xff0c;凡是牵涉自定义排序的算法&#xff0c;很大一部分都在用冒泡&#xff0c;其中很多都忽略了一个关键点&#xff1b;来&#xff0c;咱们细细品…正文1. 冒泡排…

荐书 | 攻克世纪难题,拒绝领取菲尔兹奖的孤独数学天才的一生

今天小木给大家介绍五本数学科普文&#xff0c;了解了一些数学家研究数学、证明猜想的经历&#xff0c;他们的专研精神简直让小木五体投地&#xff01;这也验证了一句经典名言“念念不忘&#xff0c;必有回响”。希望我们都能把时间奉献给自己喜欢的事情上。下面&#xff0c;让…

C# 搭建自己的NuGet服务器,上传自定义NuGet包

第一步搭建NuGet服务器创建空Web项目安装Nuget服务&#xff0c;目前最新版本2.8.2安装完成&#xff0c;会自动生产服务&#xff0c;出现如下界面发布该网站&#xff0c;并部署至IIS将.nupkg文件发布至网站的Packages目录。在VS中修改NuGet引用路径注意把自定NuGet放在首位&…

在不同的ObjectContext中更新数据

第一个using中获取一些数据 User u; using (var db new Entities()) {u db.Users.First(); } 在using外改变 u.NickName "ABC"; 在第二个using中把改变更新到库 using (var db new Entities()) { …… db.SaveChanges(); } 在网上看了一些使用ApplyPropertyC…

5分钟理解一致性哈希算法

来自&#xff1a;cywosp链接&#xff1a;https://blog.csdn.net/cywosp/article/details/23397179一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希&#xff08;DHT&#xff09;实现算法&#xff0c;设计目标是为了解决因特网中的热点(Hot spot)问题&#xff0c;初衷…

linux 取消证书登录密码,SUSELinux 中为 SSH 访问设置不输入密码的证书认证登录方式...

SSH Client &#xff1a;linux-gxntSSH Server &#xff1a;xxzx-rdb目的&#xff1a; linux-gxnt 上的 nagios 用户以相同的用户(nagios)SSH 登录xxzx-rdb &#xff0c;不用输入密码。1.在 SSH Client 和 Server 上使用 yast 创建 nagios 用户和nagios 组&#xff0c;nagios 用…

Blazor 初探

Blazor 初探目录一、新建项目二、ASP.NET Core Blazor 项目结构三、结合代码讲解四、改造五、配置文件的使用六、发布到 Linux&#xff08;CentOS&#xff09;题外话&#xff0c;期间遇到个问题反向代理七、地址独立观察员 2021 年 4 月 11 日上个月发了篇文章《Blazor 中如何下…

Relaltek声卡在UBUNTU下没有声音的解决方法。

为什么80%的码农都做不了架构师&#xff1f;>>> The computer has an HDA Intel chip (Realtek ALC887) and I couldnt open alsamixer (this error was displayed: "load hw:0 error: Invalid argument"), although the sound seemed to be working in …

.Net项目模板进阶

友情提示&#xff1a;这篇有点长&#xff0c;有点绕&#xff0c;加油&#xff01;上一篇文章&#xff0c;简单的说明了一下.net项目模板的创建&#xff0c;主要是通过在项目文件*.csproj同目录下添加.template.config文件夹和里面的template.json&#xff0c;再用dotnet new -i…

Web Worker 使用教程

一、概述JavaScript 语言采用的是单线程模型&#xff0c;也就是说&#xff0c;所有任务只能在一个线程上完成&#xff0c;一次只能做一件事。前面的任务没做完&#xff0c;后面的任务只能等着。随着电脑计算能力的增强&#xff0c;尤其是多核 CPU 的出现&#xff0c;单线程带来…

NET问答: C# 中是否有最高效的方式对大文件做 checksum ?

咨询区 Dario&#xff1a;我需要在多台机器间同步大文件&#xff0c;不过文件高达 6G&#xff0c;通常我都是每几周手工同步一次&#xff0c;考虑到文件的文件名经常变&#xff0c;为了检验一致性&#xff0c;我考虑使用 checksum 机制。我的计划是在 源机器 和 目标机器 上做 …

linux宝塔类似工具,有没有比宝塔面板更好的linux运维工具?

我是一个站长,现在建站seo是比较重要的部分,买了独立ip的云服务器主机,为了就是能够seo效果好点.建站优化我不担心,最郁闷的就是linux服务器运维这块,宝塔linux面板是必须安装到服务器上,比较消耗服务器内存,运维比较麻烦.还有就是购买宝塔面板的附带插件比较贵,基本买个网站防…

世界上最难的5种编程语言

每个程序员都熟悉许多编程语言。许多编程语言都是高级的&#xff0c;它们的语法是人类可读的。然而&#xff0c;也有一些低级语言&#xff0c;对于一个人来说&#xff0c;读起来很困难&#xff0c;但是可以理解。您是否遇到过一种既不可读又不可理解的编程语言?有一些编程语言…

云原生 | .NET 5 with Dapr 初体验

【Dapr】| 总结/Edison Zhou分布式应用运行时Dapr目前已经发布了1.1.0版本&#xff0c;阿里云也在积极地为Dapr贡献代码和落地实践。作为一名开发者&#xff0c;自然也想玩一玩&#xff0c;看看Dapr带来的新“视”界到底是怎么样的。1关于DaprDapr&#xff08;Distributed Appl…

Python资料分享来袭,收下不谢!

近几年&#xff0c;机器学习一直很火&#xff0c;小编也有意识地收集了机器学习相关的资源&#xff0c;经过长时间的积累和沉淀&#xff0c;内容涵盖“Python教程”、“编程指南”、“学习视频”等。现在&#xff0c;小编准备将这些资料免费分享给大家&#xff01;扫描下面二维…

我敢说,这是最全的常用设计模式汇总

先分享一个小故事两个年轻人是大学同班同学&#xff0c;他们毕业后一起被同一家公司录取&#xff0c;可以说是站在相同的起跑线上。两个人都对未来信心满满&#xff0c;踌躇满志。其中一人怀抱满腔激情&#xff0c;到处学热门框架&#xff0c;但受限于公司体量和业务逻辑&#…