今日訪談《玩大小單雙五期必中的實力導師》陳北團隊

chenbei發表於2023-04-13

玩大小單雙五期必中的實力導師 【╅導.師1460179】〖—880XS·CC—〗【金-牌-團-隊-導-師-單-帶,推-薦-頂-級-信-譽-網,丨一.對.一.丨全.天.在.線.】

.NET 8 Preview 3 現已推出,這個預覽版包括對構建路徑、工作負載、Microsoft.Extensions 和容器的更改,還包括針對 Arm64 的 JIT 和動態 PGO 的效能改進。

以下為該預覽版的部分改動:

SDK 改動

對 SDK 進行了多項改進,並進行了重大更改。

有關重大更改的更多資訊,請參閱  。

簡化輸出路徑 

.NET SDK 引入了一個選項來建立更統一、更簡化的輸出路徑結構。新的輸出路徑側重於:

  • 將所有構建輸出收集在一個公共位置
  • 在公共位置下按專案分隔構建輸出
  • 將整體構建輸出佈局展平到 最多三層深度

要選擇新的輸出路徑佈局,需要在  Directory . Build . props 檔案中設定  UseArtifactsOutput 屬性。

開始的最簡單方法是在儲存庫的根目錄中執行  dotnet  new  buildprops ,開啟生成的  Directory . Build . props 檔案,然後將以下內容新增到該檔案中的  PropertyGroup :

<UseArtifactsOutput>true</UseArtifactsOutput>

此後,所有專案的構建輸出都將放入儲存庫根目錄中的 .artifacts 目錄中,該目錄可配置,只需將 Directory.Build.props 檔案中的 ArtifactsPath 屬性設定為其他目錄。

. artifacts  目錄的佈局將採用   <ArtifactsPath> \ <Type   of   Output > \ <Project   Name > \ <Pivots>  形式。

新的 dotnet workload clean  命令  

新的命令,可幫助清理剩餘的工作負載包(工作負載所包含的實際功能、   和模板單元):

dotnet workload clean

clean 有兩種操作模式,分別是:

dotnet workload clean

這個模式為基於檔案或基於 MSI 的工作負載執行工作負載垃圾收集。在這種模式下,垃圾收集行為正常,只清理孤立的包本身。

dotnet workload clean --all

與 workload clean 不同, workload clean --all 不定期執行垃圾回收,這意味著它會清除機器上 所有,不是來自 Visual Studio 且屬於當前 SDK 工作負載安裝型別(基於檔案或基於 MSI)的現有包。

執行時改動

引入驗證選項結果生成器 (ValidateOptionsResultBuilder)

新的 ValidateOptionsResultBuilder 使建立 ValidateOptionsResult 物件變得更容易,這是實現 IValidateOptions.Validate(String, TOptions) 所必需的。

此構建器允許累積多個錯誤,然後一次檢視所有問題,並相應地解決它們。

使用示例:

ValidateOptionsResultBuilder builder = new();
builder.AddError("Error: invalid operation code");
builder.AddResult(ValidateOptionsResult.Fail("Invalid request parameters"));
builder.AddError("Malformed link", "Url");// Build ValidateOptionsResult object has accumulating multiple errors.ValidateOptionsResult result = builder.Build();// Reset the builder to allow using it in new validation operation.builder.Clear();

引入配置繫結原始碼生成器(the configuration binding source generator)

使用新的 ,可自動生成無反射和 AOT 友好的繫結實現。

該生成器會探測 Configure 、 Bind 和 Get 呼叫,可以從中檢索型別資訊。

using Microsoft.AspNetCore.Builder;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.DependencyInjection;
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
IConfigurationSection section = builder.Configuration.GetSection("MyOptions");// !! Configure call - to be replaced with source-gen'd implementationbuilder.Services.Configure<MyOptions>(section);// !! Get call - to be replaced with source-gen'd implementationMyOptions options0 = section.Get<MyOptions>();// !! Bind call - to be replaced with source-gen'd implementationMyOptions options1 = new MyOptions();
section.Bind(myOptions1);
WebApplication app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();public class MyOptions{    public int A { get; set; }    public string S { get; set; }    public byte[] Data { get; set; }    public Dictionary<string, string> Values { get; set; }    public List<MyClass> Values2 { get; set; }
}public class MyClass{    public int SomethingElse { get; set; }
}

在專案中啟用生成器時,編譯器會隱式地選擇生成的方法,而不是預先存在的基於反射的框架實現。

要啟用該原始碼、生成器,請下載 Microsoft.Extensions.Configuration.Binder 的最新預覽版。 生成器 預設關閉。要使用它,請將以下屬性新增到專案檔案中:

<PropertyGroup>
    <EnableMicrosoftExtensionsConfigurationBinderSourceGenerator>true</EnableMicrosoftExtensionsConfigurationBinderSourceGenerator></PropertyGroup>

.NET 8 將在第四個預覽版向 .NET SDK 新增啟用機制,不需要 NuGet 包引用也可以使用原始碼、生成器。

本機程式碼生成 Native code generation

對 JIT 編譯器進行了以下改進:

Arm64 

  •   OR ( condition ,  condition )  轉換為   CCMP  。它允許 JIT 在 arm64 上發出   CCMP  以進行按位或關係比較。  
  • 為 arm64 最佳化了   x   <   0    x   >=   0     
  • 最佳化了除法在某些場景的溢位檢查。

配置檔案引導最佳化

  • 啟用了基本塊計數的互鎖分析 
  • 支援配置檔案合成   ,  ,  , 
  • 在 Tier0 中啟用了更多內在函式,例如 get_IsValueType   


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028928/viewspace-2945657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章