前言
2021/4/8 .NET 6 Preview 3 發布,這個版本的改進大多來自于底層,一起來看看都有什么新特性和改進吧,
庫改進
新增值型別作為字典值時更快的處理方法
.NET 6 Preview 3 引入了新的 unsafe API CollectionsMarshal.GetValueRef,這個 API 允許你在無資料拷貝的情況下就地更新值,并且將鍵的哈希計算從 2 次減少到 1 次,該改進在高性能場景下更新字典中存盤的 struct 非常有用,
例如:
ref MyStruct value = https://www.cnblogs.com/hez2010/archive/2021/04/09/CollectionsMarshal.GetValueRef(dictionary, key);
// 如果不存在則回傳 Unsafe.NullRef()
if (!Unsafe.IsNullRef(ref value))
{
// 無需拷貝,就地更新
value.MyInt++;
}
介面檢查和轉換性能提升
介面的轉換以及檢查型別是否實作某介面的性能提升了 16~38%,該改進對模式匹配的性能提升尤其有用,

運行時
.NET 6 Preview 3 也包含更多的運行時改進
代碼生成優化
- 檢查 Length 后移除邊界檢查
- Span 邊界檢查省略和頂層范圍檢查節點移除
- 添加對位元組陣列訪問的 loop cloning 支持
- JIT: 非 void 的 ThrowHelpers
- 浮點數常量 CSE
- 為不可變靜態只讀欄位啟用 CSE 和回圈不變式提升優化
- 折疊更多的常數字串 null 檢查
- 消除沒有 GC 欄位的被跟蹤臨時記憶體的零初始化
動態 PGO
- 更新回傳合并和尾呼叫的 profile
- Class profile: 為集合類 typehandle 可使用 unknown 占位符
在暫存器中保持值型別結構
- 完成值型別結構改進的第一部分: 創建更多的 LCL_FLD
- 改進 ‘STORE_BLK(lcl_var)’ 的生存性
完成 .NET 6 例外處理器寫直通
- JIT 中默認啟用
- 將單定義的例外處理器放入暫存器
- 7~18% 性能提升

.NET 熱多載對 Web 應用初步可用
.NET 6 Preview 3 啟用了對 ASP.NET Core 和 Blazor 熱多載的初步支持,只需要通過 dotnet watch 啟動專案即可使用,不過需要修改 Properties/launchSettings.json 后才能使用熱多載:
對于 ASP.NET Core 應用,添加 "hotReloadProfile": "aspnetcore";對于 Blazor WebAssembly 應用,添加 "hotReloadProfile": "blazorwasm",
熱多載可以在不重新啟動應用程式,并且也不丟掉背景關系和應用狀態的情況下直接應用代碼的更新,該功能不依賴 Visual Studio,即使你用記事本修改代碼也一樣能進行熱多載,
另外,這只是 .NET 6 熱多載第一步,后續還會為其他所有型別的 .NET 應用開發啟用熱多載支持,


結語
關于 ASP.NET Core 和 EntityFramework Core 其實還有更多的更新內容,但是這里就不一一介紹了,
以上就是 .NET 6 Preview 3 中包含的部分更新內容,感謝閱讀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/274324.html
標籤:.NET技术
