最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

.NET 6 Preview 2 發(fā)布??!

2021-03-17 11:13 作者:微軟MVP-Eleven  | 我要投稿

前 言


? ? ? ? 在 2021 年 3 月 11 日, .NET 6 Preview 2 發(fā)布,這次的改進(jìn)主要涉及到 MAUI、新的基礎(chǔ)庫(kù)和運(yùn)行時(shí)、JIT 改進(jìn)。

.NET 6 正式版將會(huì)在 2021 年 11 月發(fā)布,支持 Windows、macOS、Linux、Android 和 iOS 等系統(tǒng)以及 x86、x86_64、ARM 和 ARM64 架構(gòu)。另外,.NET 6 是 LTS 版本,將提供長(zhǎng)達(dá)至少三年的支持。

那么一起來(lái)看看都有哪些內(nèi)容吧。

主題:改進(jìn)內(nèi)部循環(huán)性能

? ? ? ? 過去的幾個(gè) .NET 版本針對(duì)提升吞吐量、減少內(nèi)存消耗等性能方面做了很多工作。而在 .NET 6 將會(huì)針對(duì)內(nèi)部循環(huán)性能做出改進(jìn):不僅僅追求在應(yīng)用和服務(wù)上做到最佳的性能,還要追求在應(yīng)用模型、工具鏈和工作流程上的最佳性能。

其中一些工作看起來(lái)與過去的傳統(tǒng)吞吐量?jī)?yōu)化工作非常相似,但實(shí)際上這里不關(guān)注穩(wěn)態(tài)性能,而是關(guān)注運(yùn)行時(shí)、應(yīng)用模型、命令行、msbuild 等的啟動(dòng)性能,以及工具的端到端性能(特別是對(duì)于較小的解決方案)。

這種優(yōu)化所涉及的思維方式通常與針對(duì)穩(wěn)態(tài)吞吐量進(jìn)行優(yōu)化時(shí)所使用的思維方式大不相同。對(duì)于穩(wěn)態(tài)工作,您可能會(huì)專注于緩存將來(lái)可以重用的值,但是對(duì)于啟動(dòng)性能而言,通常您將注意力集中在只能被調(diào)用一次的操作上,而第一次調(diào)用的成本很重要。

但是,這里涉及的工作確實(shí)與許多其他性能工作一樣,都有一個(gè)典型的測(cè)量-分析-修復(fù)循環(huán):分析要優(yōu)化的應(yīng)用程序的相關(guān)區(qū)域,分析結(jié)果數(shù)據(jù)以查找最主要的原因和瓶頸,然后為它們提出解決方案,然后重新開始尋找下一個(gè)有影響力的項(xiàng)目的過程。

我們?nèi)匀惶幱?.NET 6 開發(fā)周期的初期,但是我們已經(jīng)成功地削減了開發(fā)人員內(nèi)部循環(huán)所涉及的關(guān)鍵領(lǐng)域的開銷,重點(diǎn)關(guān)注各種 dotnet 命令,例如?new,build?和?run。

目前已包含的改進(jìn)例如:

  • 避免工具出現(xiàn)意料之外的 JIT:https://github.com/dotnet/installer/pull/9635

  • 避免未啟用日志時(shí)產(chǎn)生日志相關(guān)的昂貴開銷:https://github.com/dotnet/aspnetcore/pull/27956

  • 優(yōu)化 MSBuild:https://github.com/dotnet/msbuild/pull/6151

  • 使用代碼生成器替換原 Razor 編譯器以加快編譯速度:https://github.com/dotnet/sdk/pull/15756

  • 優(yōu)化訪問文件的方式以減少觸發(fā)反病毒軟件的掃描:https://github.com/dotnet/runtime/pull/48774

? ? ? ? 當(dāng)然,最佳性能優(yōu)化之一是避免完成全部的工作,這是 .NET 6 主題另一半的重點(diǎn):.NET 熱重載。通過允許在運(yùn)行應(yīng)用程序時(shí)甚至在未連接調(diào)試器的情況下對(duì)代碼進(jìn)行編輯,熱重載將在所有受支持的操作系統(tǒng)和硬件平臺(tái)上提高開發(fā)人員的生產(chǎn)率。開發(fā)人員修改代碼后不需要重新編譯和啟動(dòng)程序,更改將立即生效,如此可以跳過整個(gè)更改-構(gòu)建-運(yùn)行周期。此特性有望從根本上改善 .NET 開發(fā)人員編寫應(yīng)用和服務(wù)的方式。

上圖展示了 .NET 5 和 .NET 6 Preview 2 的 razor 編譯時(shí)間對(duì)比。

主題:.NET 擁有優(yōu)秀的客戶端開發(fā)體驗(yàn)

? ? ? ??.NET 6 最令人興奮的部分之一是移動(dòng)開發(fā),目前作為單獨(dú)的Xamarin 產(chǎn)品提供。隨著時(shí)間的流逝,我們一直在使 Xamarin 更類似于主線 .NET?,F(xiàn)在是時(shí)候?yàn)?.NET 提供完全統(tǒng)一的移動(dòng)產(chǎn)品了。使用 .NET 6,iOS,Android 和 macOS 開發(fā)將集成到 .NET SDK 中,并使用 .NET 庫(kù)。在過去的兩年中,我們一直在努力將 Mono 集成到 .NET 中,因此開發(fā)人員可以利用這兩種運(yùn)行時(shí)的優(yōu)勢(shì),而不必針對(duì)不同的 .NET 版本,也不必?fù)?dān)心兼容性問題。在 .NET 5 中,我們將 Blazor WebAssembly 移了過來(lái),并在 Xamarin 中使用了相同的模型。.NET 6 是這種統(tǒng)一努力的最高潮,涵蓋了主題的關(guān)鍵部分:Xamarin 開發(fā)人員可以升級(jí)到現(xiàn)有應(yīng)用程序并使用最新的 .NET SDK。

? ? ? ? ?現(xiàn)在,您所有的 .NET 應(yīng)用程序都將在相同的庫(kù)上運(yùn)行,我們希望增加在 PC 和移動(dòng)平臺(tái)上共享的代碼量。Xamarin 的跨平臺(tái) UI 框架 Xamarin.Forms 正在演變?yōu)?.NET MAUI,使您可以使用相同的代碼庫(kù)輕松編寫適用于 iOS,Android,Windows 和 macOS 的應(yīng)用程序。.NET MAUI 作為 .NET 6 的一部分提供,同時(shí)還進(jìn)行了一系列性能和工具改進(jìn),例如 .NET/C# 熱重載、在跨不同平臺(tái)共享更多的資源和代碼,以及具有一組更靈活的 UI 控件的更好的頁(yè)面呈現(xiàn)性能。

? ? ? ? ?.NET MAUI 不僅適用于客戶端應(yīng)用程序開發(fā)人員。得益于重構(gòu)的控件集以及可以在 .NET 6 庫(kù)上運(yùn)行的功能,您現(xiàn)有的 Blazor 應(yīng)用程序可以通過 .NET MAUI 在 Windows 和 macOS 上原生運(yùn)行。您將能夠與 Blazor 代碼庫(kù)無(wú)縫結(jié)合原生控件和功能,包括特定于平臺(tái)的功能。

? ? ? ? ?此主題的最后一部分是關(guān)于打包,部署和發(fā)布您的跨平臺(tái)客戶端應(yīng)用程序。由于開發(fā)應(yīng)用程序的開發(fā)人員/目標(biāo)平臺(tái)/方式太多,因此每天結(jié)束時(shí)您必須分發(fā)許多不同的應(yīng)用程序包。尤其是對(duì)于 Blazor 桌面,我們希望使體驗(yàn)盡可能無(wú)縫。我們正在研究改善本地和云中發(fā)行和版本控制的策略。

總結(jié)一下,在 .NET 6,你將能夠:

  • 用 .NET 庫(kù)構(gòu)建 iOS、Android 和 macOS 應(yīng)用

  • 借助 .NET MAUI 使用相同的代碼創(chuàng)建 iOS、Android、Windows 和 macOS 客戶端應(yīng)用

  • 在不同平臺(tái)之間共享代碼和資源

  • 在 macOS 和 Windows 上原生運(yùn)行 Blazor 應(yīng)用

  • 輕松打包和分發(fā)你的程序

MAUI 的 GitHub 倉(cāng)庫(kù):http://github.com/dotnet/maui

MAUI 更新

MAUI 的示例程序已經(jīng)針對(duì) .NET 6 Preview 2 更新:https://github.com/dotnet/net6-mobile-samples ,你可以直接使用 dotnet 的命令行構(gòu)建和啟動(dòng)應(yīng)用。

Mac Catalyst

現(xiàn)在可以添加如下代碼到項(xiàng)目屬性中構(gòu)建 macOS 的桌面應(yīng)用:

Copy

<TargetFrameworks>net6.0-android;net6.0-iosTargetFrameworks>
<TargetFrameworks?Condition=" '$(OS)' != 'Windows_NT' ">$(TargetFrameworks);net6.0-maccatalystTargetFrameworks>

單個(gè)多平臺(tái)應(yīng)用項(xiàng)目

.NET MAUI 的單個(gè)項(xiàng)目體驗(yàn)已經(jīng)啟用,你可以通過一個(gè)項(xiàng)目文件同時(shí)適配 Android、iOS 和 macOS;對(duì)于 Windows 的支持將會(huì)取決于 WinUI 3,因此這部分在未來(lái)會(huì)加入。

上圖展示了單個(gè)項(xiàng)目中包含多個(gè)平臺(tái)的開發(fā)體驗(yàn)。

共享字體、圖片和應(yīng)用圖標(biāo)

字體和圖片也可以放到你的項(xiàng)目中的同一個(gè)位置,.NET MAUI 將允許你在所有平臺(tái)上訪問它們,例如:

Copy

<ItemGroup>
<SharedImage?Include="appicon.svg"?ForegroundFile="appiconfg.svg"IsAppIcon="true"?/>
<SharedFont?Include="Resources\Fonts\ionicons.ttf"?/>
ItemGroup>

除了指定特定文件之外,還支持使用 wild-card 按照路徑匹配所有的文件作為共享圖片或者字體:

Copy

<ItemGroup>
<SharedImage?Include="appicon.svg"?ForegroundFile="appiconfg.svg"IsAppIcon="true"?/>
<SharedImage?Include="Resources\Images*"?/>
<SharedFont?Include="Resources\Fonts*"?/>
ItemGroup>

MAUI 應(yīng)用使用 HostBuilder 啟動(dòng)程序

利用類似 ASP.NET Core 配置的體驗(yàn)配置 MAUI 程序,并支持依賴注入。例如:

Copy

public?class?Application?:?MauiApp
{
public?override?IAppHostBuilder?CreateBuilder() =>?
base.CreateBuilder()
.RegisterCompatibilityRenderers()
.ConfigureServices((ctx, services) =>
{
services.AddTransient();
services.AddTransient();
})
.ConfigureFonts((hostingContext, fonts) =>
{
fonts.AddFont("ionicons.ttf",?"IonIcons");
});

public?override?IWindow?CreateWindow(IActivationState state)
{
Microsoft.Maui.Controls.Compatibility.Forms.Init(state);
return?Services.GetService();
}
}

新的控件處理器

.NET MAUI 引入了全新的控件處理機(jī)制,Preview 2 中包含第一組利用這些機(jī)制的控件:Button、Label、Entry、Slider?和?Switch。如果想要加速實(shí)現(xiàn)其他控件,也歡迎社區(qū) PR,具體可見:https://github.com/dotnet/maui/wiki/Handler-Property-PR-Guidelines 。

.NET MAUI 的示例程序現(xiàn)在從同一個(gè)項(xiàng)目運(yùn)行在 macOS、iOS 和 Android 上,以下是運(yùn)行效果:

macOS:

iOS:

Android:

移動(dòng) SDK 更新

Android

  • 將默認(rèn)庫(kù)設(shè)置為 Android X

iOS

  • Windows 上的開發(fā)者可以使用遠(yuǎn)程 iOS 模擬器

  • Windows 上的開發(fā)者可以連接到遠(yuǎn)程的 macOS 上構(gòu)建應(yīng)用

  • AOT 已經(jīng)被添加和啟用以支持部署和分發(fā) iOS 應(yīng)用

.NET 庫(kù)更新

.NET 的庫(kù)在 Preview 2 中也有不少更新。

System.Text.Json?忽略循環(huán)引用

System.Text.Json?現(xiàn)在支持忽略循環(huán)引用了,對(duì)于循環(huán)引用,可以不再拋出異常,而是像?Newtonsoft.Json?那樣簡(jiǎn)單的設(shè)置成?null

Copy

class?Node
{
public?string?Description {?get;?set; }
public?object?Next {?get;?set; }
}

void?Test()
{
var?node =?new?Node { Description =?"Node 1"?};
node.Next = node;

var?opts =?new?JsonSerializerOptions { ReferenceHandler = ReferenceHandler.IgnoreCycles };

string?json = JsonSerializer.Serialize(node, opts);
Console.WriteLine(json);?// 輸出 {"Description":"Node 1","Next":null}
}

優(yōu)先隊(duì)列?PriorityQueue

.NET 6 Preview 2 加入了新的優(yōu)先隊(duì)列:?System.Collections.Generic.PriorityQueue。

Copy

// 創(chuàng)建一個(gè) int 作為優(yōu)先級(jí)的 string 隊(duì)列
var?pq =?new?PriorityQueue<string,?int>();

// 各種元素入隊(duì)
pq.Enqueue("A", 3);
pq.Enqueue("B", 1);
pq.Enqueue("C", 2);
pq.Enqueue("D", 3);

pq.Dequeue();?// 返回 "B"
pq.Dequeue();?// 返回 "C"
pq.Dequeue();?// 返回 "A" 或者 "D"

改進(jìn)的數(shù)值格式解析

對(duì)于標(biāo)準(zhǔn)數(shù)值格式,我們改進(jìn)了其解析器,尤其是針對(duì)?.ToString?和?.TryFormat?的改進(jìn)。精度大于小數(shù)點(diǎn)后 99 位時(shí)的結(jié)果現(xiàn)在已被改進(jìn),并且還提供了對(duì)尾部 0 的更好支持:

  • 32.ToString("C100")

    • .NET 6:32.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

    • .NET 5:存在 99 位精度的限制

  • 32.ToString("H99")?和?32.ToString("H100")

    • .NET 6:拋出?FormatException

    • .NET 5:H?是一個(gè)無(wú)效的格式修飾,但是沒有拋出異常而是返回了錯(cuò)誤結(jié)果

  • double.Parse("9007199254740997.0")

    • .NET 6:9007199254740996

    • .NET 5:9007199254740998

SignalR 的可空類型標(biāo)注

SingleR 現(xiàn)在已經(jīng)完成了可空類型的標(biāo)注。

運(yùn)行時(shí)更新

.NET 6 Preview 2 在運(yùn)行時(shí)上也有不少改進(jìn)。

框架程序集使用 Crossgen2 預(yù)編譯

所有的 .NET 庫(kù)現(xiàn)在已經(jīng)使用 crossgen 2 進(jìn)行預(yù)編譯,目前只限于 .NET 的基礎(chǔ)庫(kù),對(duì)于其他的庫(kù)比如 ASP.NET Core 和 Windows Desktop,則會(huì)在后續(xù)的預(yù)覽版本逐漸遷移到 crossgen 2。

Crossgen 2 本身并不是關(guān)注于性能改善的,而是用于啟用新的性能特性(如 PGO)。不過 crossgen 2 帶來(lái)了一些硬盤占用空間的改進(jìn):

Copy

Size?[MB]?FullName
---------?--------
64.22?C:Program?FilesdotnetsharedMicrosoft.NETCore.App5.0.3
63.31?C:Program?FilesdotnetsharedMicrosoft.NETCore.App6.0.0-preview.1.21102.12
63.00?C:Program?FilesdotnetsharedMicrosoft.NETCore.App6.0.0-preview.2.21118.6

PGO

.NET 6 Preview 2 添加了以下改進(jìn):

  • Allow CSE & hoisting of vtable lookups for the indirections —?dotnet/runtime #47808

  • Block counts in tiered compilation —?dotnet/runtime #13672

  • Allow Inlinee profile scale-up —?dotnet/runtime #48280

  • Efficient profiling scheme (e.g., spanning tree with efficient edge instrumentation) —?dotnet/runtime #46882,?dotnet/runtime #47509,?dotnet/runtime #47476,?dotnet/runtime #47072,?dotnet/runtime #47597,?dotnet/runtime #47723,?dotnet/runtime #47876,?dotnet/runtime #47959

JIT 改進(jìn)

.NET 6 Preview 2 包含以下針對(duì) JIT 的改進(jìn):

  • Not aligning cloned loops —?dotnet/runtime #48090

  • MultiplyHigh intrinsics (smulh/umulh) —?dotnet/runtime #47362

這些改進(jìn)的結(jié)果分析可以在這里查看:

  • 2021 年 1 月 26 日:https://github.com/dotnet/runtime/issues/43227#issuecomment-767967603

  • 2021 年 2 月 3 日:https://github.com/dotnet/runtime/issues/43227#issuecomment-772914110

另外,對(duì) ARM64 的優(yōu)化也在不斷和 ARM 工程師一起進(jìn)行中。

結(jié)語(yǔ)

以上就是 .NET 6 Preview 2 中的改進(jìn)內(nèi)容了。

.NET 6 的功能改進(jìn)將會(huì)在 7 月之前全部完成,之后就會(huì)專注于質(zhì)量上的改進(jìn)了。


.NET 6 Preview 2 發(fā)布??!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
伊通| 安福县| 百色市| 梅河口市| 沙湾县| 渝中区| 乌恰县| 昭平县| 水城县| 建水县| 樟树市| 长顺县| 若尔盖县| 雅安市| 新余市| 重庆市| 金华市| 剑川县| 商南县| 班戈县| 关岭| 汝州市| 通州区| 湟源县| 枞阳县| 浠水县| 汕尾市| 巴彦县| 杂多县| 荔波县| 卫辉市| 新丰县| 玉门市| 临桂县| 子长县| 兰考县| 东台市| 紫阳县| 葵青区| 易门县| 康保县|