.NET 7新特性全面解析
1. 更好的性能
.NET 7 將繼續(xù)提高運(yùn)行時(shí)性能,改進(jìn) JIT 編譯器,減少內(nèi)存分配,優(yōu)化 GC,以及提高 ASP.NET Core 和 Entity Framework 的性能。性能優(yōu)化將在整個(gè)框架內(nèi)體現(xiàn),為開(kāi)發(fā)者帶來(lái)更佳的開(kāi)發(fā)體驗(yàn)。
2. 改進(jìn)的 AOT 編譯
.NET 7 將進(jìn)一步改進(jìn) Ahead-of-Time(AOT)編譯,提供更好的啟動(dòng)性能和更小的應(yīng)用程序體積。通過(guò)更好的 AOT 編譯支持,開(kāi)發(fā)者可以將應(yīng)用程序預(yù)編譯為本機(jī)代碼,從而在運(yùn)行時(shí)減少 JIT 編譯的開(kāi)銷(xiāo)。
3. C# 11 新特性
.NET 7 將搭載 C# 11,引入更多語(yǔ)言特性,提高開(kāi)發(fā)者的生產(chǎn)力。C# 11 的新特性尚未全部確定,但我們可以期待更多有關(guān)代碼簡(jiǎn)化、性能改進(jìn)和互操作性的功能。
請(qǐng)注意,在 C# 11 正式發(fā)布前,這些特性可能會(huì)發(fā)生變化。
3.1. 參數(shù) null 檢查
C# 11 可能會(huì)引入?yún)?shù) null 檢查,這是一種簡(jiǎn)化方法和構(gòu)造函數(shù)參數(shù)檢查的方法。通過(guò)在參數(shù)前添加一個(gè)感嘆號(hào),編譯器將自動(dòng)為參數(shù)生成 null 檢查。
3.2. Record 類(lèi)型改進(jìn)
C# 9 引入了記錄類(lèi)型(record types),它們是用于創(chuàng)建不可變對(duì)象的簡(jiǎn)潔方法。C# 11 可能會(huì)繼續(xù)完善這一特性,例如提供默認(rèn)的 Deconstruct 方法以便更輕松地將記錄類(lèi)型分解為變量:
3.3 更簡(jiǎn)潔的 using 語(yǔ)句
C# 11 可能會(huì)引入更簡(jiǎn)潔的 using 語(yǔ)句,允許開(kāi)發(fā)者在不使用花括號(hào)的情況下聲明一個(gè)需要釋放的資源。這將使代碼更加簡(jiǎn)潔并減少嵌套。例如:
4. 更豐富的跨平臺(tái)支持
.NET 7 將擴(kuò)展對(duì) ARM64 和 WebAssembly 的支持,進(jìn)一步強(qiáng)化跨平臺(tái)能力。這意味著開(kāi)發(fā)者可以輕松將應(yīng)用程序部署到更多設(shè)備和平臺(tái),包括 IoT 設(shè)備和移動(dòng)設(shè)備。
5. 更好的容器支持
.NET 7 將改進(jìn)對(duì)容器技術(shù)(如 Docker)的支持,提供更小的鏡像和更好的性能。這將使得將 .NET 應(yīng)用程序部署到容器變得更加便捷,提高應(yīng)用程序在云環(huán)境中的性能。
5.1 更小的容器鏡像
.NET 7 將致力于減小容器鏡像的大小,從而降低部署和運(yùn)行應(yīng)用程序所需的資源。這將通過(guò)優(yōu)化基礎(chǔ)鏡像、移除不必要的組件以及提供更多選擇性的依賴(lài)項(xiàng)安裝等手段來(lái)實(shí)現(xiàn)。更小的容器鏡像將提高容器啟動(dòng)速度、減少網(wǎng)絡(luò)傳輸時(shí)間以及降低存儲(chǔ)成本。
5.2 改進(jìn)的性能
.NET 7 將繼續(xù)關(guān)注在容器環(huán)境中的性能優(yōu)化。這包括改進(jìn) JIT 編譯器、減少內(nèi)存占用、優(yōu)化垃圾回收以及提高 ASP.NET Core 和 Entity Framework 在容器中的性能。這些性能優(yōu)化將有助于提高應(yīng)用程序的響應(yīng)速度和吞吐量,降低資源使用率,從而減少運(yùn)行成本。
5.3 更好的彈性和可觀察性
.NET 7 將致力于提高容器化應(yīng)用程序的彈性和可觀察性。這意味著更好地支持現(xiàn)代云原生架構(gòu)模式,如微服務(wù)、事件驅(qū)動(dòng)架構(gòu)和服務(wù)網(wǎng)格。此外,.NET 7 將提供更豐富的診斷和監(jiān)控功能,以便開(kāi)發(fā)者能夠更輕松地監(jiān)控和排查容器中的應(yīng)用程序問(wèn)題。
5.4 對(duì) Kubernetes 和其他編排工具的改進(jìn)支持
.NET 7 將繼續(xù)加強(qiáng)對(duì) Kubernetes 和其他容器編排工具的支持。這包括改進(jìn)部署模板、提供對(duì) Kubernetes API 的更好支持以及與服務(wù)網(wǎng)格(如 Istio)的集成。這將使得將 .NET 應(yīng)用程序部署到 Kubernetes 變得更加便捷,提高在容器編排環(huán)境中的性能和穩(wěn)定性。
5.5 更好的 DevOps 集成
.NET 7 將關(guān)注與 DevOps 工具鏈的集成,以便更好地支持持續(xù)集成(CI)和持續(xù)部署(CD)流程。這包括與流行的 CI/CD 工具(如 Jenkins、GitLab CI 和 GitHub Actions)的集成,以及提供更多的部署選項(xiàng),如無(wú)服務(wù)器計(jì)算平臺(tái)(如 Azure Functions 和 AWS Lambda)。
6. 更強(qiáng)大的互操作性
在 .NET 7 中,開(kāi)發(fā)者可以期待更好的互操作性,例如與原生庫(kù)、C++ 代碼或 COM 對(duì)象的交互。這將使得開(kāi)發(fā)者能夠更好地集成現(xiàn)有的代碼庫(kù),并利用原生代碼的性能優(yōu)勢(shì)。
結(jié)論
隨著 .NET 7 的發(fā)布,我們可以期待許多令人興奮的新特性和改進(jìn)。從性能優(yōu)化到跨平臺(tái)支持,以及 C# 11 的語(yǔ)言特性,.NET 7 將為開(kāi)發(fā)者帶來(lái)更加強(qiáng)大的開(kāi)發(fā)體驗(yàn)。
請(qǐng)注意,本文中的一些內(nèi)容可能會(huì)在 .NET 7 正式發(fā)布前發(fā)生變化。請(qǐng)密切關(guān)注微軟官方的 .NET 7 發(fā)布計(jì)劃,以獲取最新的開(kāi)發(fā)動(dòng)態(tài)和新特性。
.Net7重要新功能和改進(jìn)
.NET 7 預(yù)覽版 1 中的新功能
支持
由于 .NET 7 是 .NET 的當(dāng)前版本,它將在接下來(lái)的 18 個(gè)月內(nèi)獲得 Microsoft 的免費(fèi)支持和補(bǔ)丁。
在操作系統(tǒng)方面,此版本將與 Red Hat Enterprise Linux (RHEL) 版本 8 上的以下架構(gòu)兼容:
AMD x64
Intel x64
ARM (aarch64)
IBM Z
LinuxONE (s390x)
.NET 多平臺(tái)應(yīng)用程序用戶界面 (.NET MAUI)
微軟將帶來(lái)一個(gè)帶有 .NET 7 的現(xiàn)代客戶端,它本機(jī)支持多個(gè)平臺(tái)。由于 Microsoft 最近還發(fā)布了 .NET MAUI Preview 13,他們計(jì)劃將其逐步推廣到 .NET 6 Release CandIDAtes (RC),然后向公眾推廣通用可用性 (GA),然后再轉(zhuǎn)向 .NET 7。
似乎還有時(shí)間讓這個(gè)特性進(jìn)入 .NET 7,但很高興知道它會(huì)到來(lái)。
創(chuàng)建云原生應(yīng)用程序變得更容易
由于云原生應(yīng)用程序現(xiàn)在是從頭開(kāi)始構(gòu)建的,使用現(xiàn)代基于 Web 的資源(例如數(shù)據(jù)庫(kù)服務(wù)和托管容器),.NET 7 將通過(guò)探索對(duì)開(kāi)發(fā)人員體驗(yàn)的改進(jìn)來(lái)更輕松地構(gòu)建云原生應(yīng)用程序,例如:
簡(jiǎn)化實(shí)施安全身份驗(yàn)證和授權(quán)所需的設(shè)置和配置。
提高應(yīng)用程序啟動(dòng)和運(yùn)行時(shí)執(zhí)行的性能。
微軟計(jì)劃進(jìn)一步開(kāi)發(fā)此功能并優(yōu)化容器,以獲得更好的可用性和體驗(yàn)。
改進(jìn)的 .NET 應(yīng)用程序
一段時(shí)間以來(lái),微軟一直在對(duì) .NET 應(yīng)用程序進(jìn)行升級(jí),例如最小化 API 和熱重載、新的運(yùn)行時(shí)和 C# 語(yǔ)言創(chuàng)新,以及成熟的庫(kù)和工具生態(tài)系統(tǒng)的可用性。
微軟表示,他們將繼續(xù)對(duì)這些應(yīng)用程序進(jìn)行創(chuàng)新,以消除每個(gè)單獨(dú)的 .NET 應(yīng)用程序所面臨的挑戰(zhàn),例如 ASP.NET、WinForms、WPF 等。
Microsoft 擴(kuò)展的可空注釋
可空注釋允許您檢查值和參數(shù)是否返回空值。Microsoft 為可空性添加了以下庫(kù):
Microsoft.Extensions.DependencyInjection.Abstractions
Microsoft.Extensions.Logging.Abstractions
Microsoft.Extensions.Primitives
Microsoft.Extensions.FileSystemGlobbing
Microsoft.Extensions.DependencyModel
Microsoft.Extensions.Configuration.Abstractions
Microsoft.Extensions.FileProviders.Abstractions
Microsoft.Extensions.FileProviders.Physical
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Binder
Microsoft.Extensions.Configuration.CommandLine
Microsoft.Extensions.Configuration.EnvironmentVariables
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Ini
Microsoft.Extensions.Configuration.Json
有了這些,Microsoft 計(jì)劃添加所有 Microsoft.Extension 庫(kù)以實(shí)現(xiàn)可空性。
熱重載的改進(jìn)
.NET 6 中的熱重載功能允許開(kāi)發(fā)人員在應(yīng)用程序運(yùn)行時(shí)對(duì)其代碼進(jìn)行更改,并隨時(shí)隨地查看結(jié)果。此功能首次在 .NET 6 Preview 3 中引入。
微軟現(xiàn)在允許對(duì) Blazor WebAssembly 或 iOS 和 Android 設(shè)備進(jìn)行以下 C# 熱重載:
-
向現(xiàn)有方法添加靜態(tài) lambda
-
將捕獲這個(gè)的 lambda 添加到已經(jīng)有至少一個(gè)捕獲這個(gè)的 lambda 的現(xiàn)有方法中
-
向現(xiàn)有類(lèi)添加新的靜態(tài)或非虛擬實(shí)例方法
-
向現(xiàn)有類(lèi)添加新的靜態(tài)字段
-
添加新類(lèi)