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

  • 2022 年 4 月 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團隊官方部落格文章。它還包含有關路線圖項目的一些非常有趣的資訊。