.NET 7 Preview 3新增了這些增強功能

張善友發表於2022-04-15

.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” 對比):

image

接下來的幾個 .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應該很簡單,並且升級失敗的可能性很小,但並非不可能。

在繼續之前,請確保已備份專案,然後開啟專案檔案並修改目標框架屬性。

<TargetFramework>net7.0</TargetFramework>

在很大程度上,Microsoft 將 .NET 7 Preview 3 中包含的大量優化和錯誤修復歸功於社群貢獻者。其中包括對程式碼生成和實時編譯所做的修復。

有關此預覽版的詳細資訊,請參閱.NET團隊官方部落格文章。它還包含有關路線圖專案的一些非常有趣的資訊。

相關文章