.NET 7 Preview 3 已發布, .NET 7 的第三個預覽版包括對可觀察性、啟動時間、代碼生成、GC Region、Native AOT 編譯等方面的增強。
有興趣的用戶可以下載適用於 Windows、macOS 和 Linux 的 .NET 7 Preview 3。Microsoft 建議使用Visual Studio 17.2 Preview 3 的 預覽頻道版本來試用 .NET 7。
Native AOT 編譯
簡而言之,Ahead of Time(AOT)編譯可以預先構建所有內容,以避免在應用程序首次運行時需要“JIT”。很長一段時間以來,.NET 團隊一直在不知疲倦地工作,為dotnet帶來適當的Native pre-Time編譯。雖然部分AOT一直存在,但完全的“真實”支持從未開箱即用。
使用Native AOT,將預編譯引入 .NET 桌面客戶端和服務器方案ReadyToRun,以及適用於移動設備和 WASM 的 Mono AOT。根據.NET團隊博客的說法,添加這一功能並不是為了取代現有技術,而是為了提供一組新的功能,允許用戶訪問新的外形規格。 Native AOT 的主要優勢在於啟動時間、內存使用、訪問受限平台(不允許 JIT)以及磁盤空間更小。Preview 3 版本對 Native AOT 性能進行了優化更新,以下是最新的 Native AOT 性能(與現有的 AOT 編譯 “ReadyToRun” 對比):
接下來的幾個 .NET 版本將持續改進 Native AOT 兼容性,且將在 dotnet SDK 中添加一流的支持(Crossgen 應用程序),以支持使用 Native AOT 發布項目。 有關原生AOT如何工作以及如何開始的更多信息,請查看官方文檔。
可觀察性
此預覽版還添加了對新的雲原生 OpenTelemetry 規范的支持。這包括規范更新 #988 和 #1708,它們使采樣器的跟蹤狀態可變。
// ActivityListener Sampling callback
listener.Sample = (ref ActivityCreationOptions<ActivityContext> activityOptions) =>
{
activityOptions = activityOptions with { TraceState = "rojo=00f067aa0ba902b7" };
return ActivitySamplingResult.AllDataAndRecorded;
};
System.Composition.Hosting
有了這個,最新的托管擴展性框架也進行了小的更新,以便與以前版本的API保持一致。使用新的 API,可以將單個對象實例添加到 System.Composition.Hosting 容器中。
啟用“Write-Xor-Execute”縮短了啟動時間
性能仍然是 .NET 7 的主要關注點。dotnet/runtime#65738 PR ,重新實現了預代碼和調用計數存根(使用分層編譯幫助程序存根),可顯著減少運行時中創建后再修改的可執行代碼數量。
啟用該 Write-Xor-Execute 新功能可縮短 10-15% 啟動時間。即使沒有啟用 Write-Xor-Execute,此更改也帶來了一些微基准測試和一些 ASPNet 基准測試的穩態性能提高(高達 8%)。
默認啟用 GC Regions
在 Preview 3 中,除了 MacOS 和 NativeAOT 之外的所有平台都默認啟用 GC Regions功能,該功能有助於提升高吞吐量應用程序的內存利用率。
有關 GC Regions 功能的詳細信息可在該 Issue 中查看。
從 .NET 6 升級
正如我們之前所討論的,從.NET 6升級到7應該很簡單,並且升級失敗的可能性很小,但並非不可能。
- 前往官方下載站點並下載 .NET SDK。
- 為了安全起見,還可以在此處查看重大更改列表。
在繼續之前,請確保已備份項目,然后打開項目文件並修改目標框架屬性。
<TargetFramework>net7.0</TargetFramework>
在很大程度上,Microsoft 將 .NET 7 Preview 3 中包含的大量優化和錯誤修復歸功於社區貢獻者。其中包括對代碼生成和實時編譯所做的修復。
有關此預覽版的詳細信息,請參閱.NET團隊官方博客文章。它還包含有關路線圖項目的一些非常有趣的信息。