.NET週報 【2月第3期 2023-02-18】

2023-02-22 12:01:34

國內文章

2023 年.NET倉庫社群年度調查已經開始

https://mp.weixin.qq.com/s/H9xUAO_yAdqm5CIHBs_eqA

中國地區是 .NET 的一個重要的市場和社群,有著眾多的 .NET 開發者和愛好者。中國地區也有著很多優秀的 .NET 相關的專案和資源。這些專案和資源為中國地區的 .NET 開發者提供了很多學習和交流的機會和平臺。為了更好地瞭解全球 .NET 開發者的情況和需求,並且為未來 .NET 的發展提供參考和建議,dotnet 官方特別推出了 dotnet 倉庫社群生態調查。進入該連結,通過第一個 comment 便可以加入調查。

https://github.com/dotnet/runtime/issues/81866

記一次 .NET 某遊戲網站 CPU爆高分析

https://www.cnblogs.com/huangxincheng/archive/2023/02/13/17115916.html

這段時間經常有朋友微信上問我這個真實案例分析連載怎麼不往下續了,關注我的朋友應該知道,我近二個月在研究 SQLSERVER,也寫了十多篇文章,為什麼要研究這東西呢? 是因為在 dump 中發現有不少的問題是 SQLSERVER 端產生的,比如:遺留事務索引缺失 ,這讓我產生了非常大的興趣,畢竟他們是一對黃金搭檔。回到本話題上來,年前有位朋友找到我,說他的程式在業務高峰期的時候CPU一直居高不下,諮詢一下是什麼問題? 按照老規矩,上 WinDbg 說話。

從 Newtonsoft.Json 遷移到 System.Text.Json

https://www.cnblogs.com/stulzq/archive/2023/02/14/17118904.html

System.Text.Json 是 .NET Core 3 及以上版本內建的 Json 序列化元件,剛推出的時候經常看到踩各種坑的吐槽,現在經過幾個版本的迭代優化,提升了易用性,修復了各種問題,是時候考慮使用 System.Text.Json 了。本文將從使用層面來進行對比。

.NET遍歷二維陣列-先行/先列哪個更快?

https://www.cnblogs.com/InCerry/p/dotNET-Traversing-Two-Dimensional-Array-Row-First-or-Column-First-Faster.html

上週在.NET效能優化群裡面有一個很有意思的討論,討論的問題"二維陣列,用C#先遍歷行再遍歷列,或者先遍歷列再遍歷行,兩種方式在效能上有區別嗎?"看了群裡面激烈的討論,剛好今天有時間,我們就來看看真實情況是怎麼樣的?實踐出真知,我們編寫一個Benchmark一測便知。

使用ML.NET做一個人臉檢測

https://mp.weixin.qq.com/s/lqfH4nFTEkv1da9TjjW4Dw

介紹瞭如何使用ML.NET實現一個人臉檢測的應用。

ASP.NET Core 7.0 的新增功能你使用了嗎?

https://mp.weixin.qq.com/s/7YuvMQbkvDb2y0MQw0NUGw

.NET7在去年11月份釋出,它屬於短期支援版本,儘管如此,也新增加了比較多的功能功能改進,包括ASP.NET Core 7.0等模組也有較大的改進,你目前用過幾個新特性呢?本文將從6個方面來簡單介紹ASP.NET Core 7.0的新增功能和改進。

WPF跨平臺方案?

https://mp.weixin.qq.com/s/n2mAkF8_4kWKqsBsvxv79A

Avalonia XPF[1] 通過我們的跨平臺UI框架,釋放現有WPF應用程式的全部潛力,使WPF應用程式能夠在macOS和Linux上執行,而不需要昂貴和有風險的重寫。

關於C#方法中參照型別引數傳遞

https://mp.weixin.qq.com/s/soNkJ7hpg3z4CspP9iXRZA

本文敘述的問題的根源在於對C#基礎知識掌握不牢固,從而在遇到難以理解的問題時浪費了大量時間;在此也警示自己,該啃啃基礎書籍了!話不多說,先上程式碼。

我不想再傳遞 nameof 了

https://mp.weixin.qq.com/s/iDq51PY78vZJEItJL-0TWQ

有的時候丟擲一個異常,我們需要知道是哪個方法丟擲的異常。那麼,我們可以通過傳遞 nameof 來獲取呼叫者的方法名。但是,感覺很煩,每次都要傳遞 nameof。那麼,有沒有更好的方法呢?

.NET 8 Preview 1 即將釋出

https://mp.weixin.qq.com/s/qwPwcawvYcJ7WZbOS-JRCw

.Net 8 Preview 1 即將到來,讓我們來提前看看都要釋出什麼吧。

主題

【英文】Avalonia UI - XPF

https://avaloniaui.net/XPF

跨平臺的商業解決方案,用於在非Windows環境下執行現有的WPF應用程式,如Linux和macOS。本產品提供了與.NET 6相容的庫,可以在Linux和macOS上執行WPF應用程式,而不需要重寫它們。 第三方元件也被支援。與Avalonia UI不同,它只在商業許可下提供,因為它被定位為一個面向企業的解決方案。

【英文】Rider 2023.1 EAP 4 來了! | .NET工具部落格

https://blog.jetbrains.com/dotnet/2023/02/13/rider-2023-1-eap-4/

Rider 2023.1 EAP 4已經發布。

它包括一些改進,如IDE縮放支援、WASM應用程式啟動的偵錯、額外的Astro支援、改進的Angular支援和Vue模板中的TypeScript支援。

【英文】ReSharper 2023.1 EAP 5 來了! | .NET工具部落格

https://blog.jetbrains.com/dotnet/2023/02/17/resharper-2023-1-eap-5/

ReSharper 2023.1 EAP 5已經發布。

這個版本包括對不活躍的前處理器分支的重新格式化、改進的重新命名重構以及對macOS、Linux x64和ARM64上獨立dotTrace的支援。

【英文】在NuGet.org上如何按目標框架搜尋

https://devblogs.microsoft.com/nuget/introducing-search-by-target-framework-on-nuget-org/

現在NuGet.org上的搜尋可以通過目標框架來縮小範圍。

如果選擇".NET",目標框架是net5.0到net7.0,必要時還可以縮小到net7.0,以此類推。 當指定net7.0時,NET 7執行時支援,但不管它是否包含在庫的TargetFrameworks中。

【中文】在裝有Apple® M1®和M2™晶片的Mac®電腦上使用Windows 11的選項 - 微軟支援

https://support.microsoft.com/zh-cn/windows/用於將windows-11與具有-apple-m1-和-m2-晶片的-mac-計算機配合使用的選項-cd15fd62-9b34-4b78-b0bc-121baa3c568c

Microsoft 正式批准了 Parallels Desktop for Mac 上的 Windows 11 Pro 和 Enterprise for Arm。

不支援 WSL、Windows Subsystem for Android、Windows Sandbox 以及依賴巢狀虛擬化的虛擬化安全。 執行32位元Arm應用程式也不被支援(這在Windows中也被廢棄)。

文章、幻燈片

【日文】ReactiveProperty v9.0.0已經發布!

https://zenn.dev/microsoft/articles/reactiveproperty-v9-0-0

ReactiveProperty v9.0.0已經發布。

它提高了效能,擴大了獨立於System.Reactive的開發範圍,並增加了ReactiveCommandSlim, ValidatableReactiveProperty<T>等類。

【日文】C#通過型別來限制物件是否可以被銷燬 - 鈴鐺為貓響

https://ikorin2.hatenablog.jp/entry/2023/02/13/072121

關於如何通過建立一個可以明確說明物件是否可以被銷燬的型別來明確銷燬物件的責任所在。

【日文】[.NET 7] P/Invoke的陷阱備忘錄

https://zenn.dev/shimat/articles/77c00c1f421a47

關於P/Invoke的隱患,如幕後處理導致的開放。

【日文】C# 12候選特性params Span 修訂後params ReadOnlySpan

https://ufcpp.net/blog/2023/2/params-ros

正在考慮在C# 12中接受非陣列的params(可變長度的引數)的規範的現狀。

【英文】省略async / await

https://guriysamarin.medium.com/omitting-async-await-723a04d8f56b

關於省略async/await並直接返回Task的做法不被推薦。

堆疊痕跡和AsyncLocal洩露的差異。 (順便說一下,也有通過使用錯誤處置的常見例子)。

【英文】使用ASP.NET Core和React與Vite.js

https://blog.codeinside.eu/2023/02/11/aspnet-core-react-with-vitejs/

如何在ASP.NET Core應用程式中使用React和Vite.js。

【日文】[C#] 使用GetTypesByMetadataName而不是GetTypeByMetadataName可能更安全 - 尼諾的花園

https://blog.neno.dev/entry/2023/02/11/161723

當你在Roslyn中使用GetTypeByMetadataName從編譯中通過後設資料名稱獲得型別時,從Roslyn 4.1開始最好使用GetTypesByMetadataName,因為如果你使用GetTypeByMetadataName通過後設資料名稱獲得一個型別,將不會得到預期的相同名稱。 下面是對此的簡要解釋。

【英文】Visual Studio AI-Assistance: 開發者的好朋友 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/visual-studio-ai-assistance-a-developers-best-friend/

介紹一下Visual Studio中的IntelliCode的作用。

【英文】在C#中確定兩個日期範圍是否重疊 - 程式碼迷宮

https://code-maze.com/csharp-determine-whether-two-date-ranges-overlap/

如何比較兩個日期範圍的重疊情況。

【英文】.NET中的Consul - 一個服務網狀結構解決方案和服務發現工具

https://medium.com/@KeivanDamirchi/consul-in-net-a-service-mesh-solution-and-service-discovery-tool-eff18292c771

如何使用HashiCorp Consul in .NET實現服務網格和服務發現?

【英文】將Xamarin.iOS和Xamarin.Android升級到.NET for iOS和Android的技巧和竅門 - Xamarin部落格

https://devblogs.microsoft.com/xamarin/upgrade-xamarin-ios-android-to-dotnet6-dotnet7/

從Xamarin.iOS和Xamarin.Android升級到.NET for iOS & Android(本地繫結,不是.NET MAUI)的技巧。

【英文】什麼是.NET,以及為什麼要選擇它?

https://devblogs.microsoft.com/dotnet/why-dotnet/

關於什麼是.NET以及為什麼你應該選擇它的文章,重點是為開發人員提供的.NET執行時間。

【日文】NuGet軟體包版本依賴性解析規則 - Qiita

https://qiita.com/ZiYuCai1984/items/dbb069f5ade08d242acb

關於參照NuGet包時的版本解析規則。

【英文】入門:Entity Framework Core 7 JSON支援 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2023/02/14/getting-started-entity-framework-core-7-json-support/

如何使用Entity Framework Core 7中新增的JSON支援。

【英文】使用編譯查詢加速EF Core

https://woodruff.dev/accelerating-ef-core-with-compiled-queries/

關於Entity Framework Core的編譯查詢。

【日文】使用.NET Blazor + Radzen - Qiita

https://qiita.com/tinymouse/items/01b1bc4a74429ddc0b17

關於使用Radzen,一個用於Blazor的UI元件庫。

網站、檔案

推文

https://twitter.com/davidfowl/status/1626097506286436352

New Bing的AI聊天功能是使用SignalR實現的。


https://twitter.com/MStrehovsky/status/1625702785516994565

.NET NativeAOT 大小的進化史,從.NET7 Preview5建立Hello World程式需要4.5MB到現在.NET8 Preview 1只需要1.7MB。

深入探索

Blazor United · Issue #46636 · dotnet/aspnetcore

https://github.com/dotnet/aspnetcore/issues/46636

.NET 8中Blazor United的問題。

版權宣告

由於筆者沒有那麼多時間對國內的一些文章進行整理,歡迎大家為《.NET週報-國內文章》板塊進行貢獻,需要推廣自己的文章或者框架、開源專案可以下方的專案地址提交Issue或者在我的微信公眾號私信。

格式如下:

  • 10~50字左右的標題
  • 對應文章或專案網址存取連結
  • 200字以內的簡介,如果太長會影響閱讀體驗

https://github.com/InCerryGit/.NET-Weekly

.NET效能優化交流群

相信大家在開發中經常會遇到一些效能問題,苦於沒有有效的工具去發現效能瓶頸,或者是發現瓶頸以後不知道該如何優化。之前一直有讀者朋友詢問有沒有技術交流群,但是由於各種原因一直都沒建立,現在很高興的在這裡宣佈,我建立了一個專門交流.NET效能優化經驗的群組,主題包括但不限於:

  • 如何找到.NET效能瓶頸,如使用APM、dotnet tools等工具
  • .NET框架底層原理的實現,如垃圾回收器、JIT等等
  • 如何編寫高效能的.NET程式碼,哪些地方存在效能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET效能問題和寶貴的效能分析優化經驗。目前一群已滿,現在開放二群。

如果提示已經達到200人,可以加我微信,我拉你進群: ls1075

另外也建立了QQ群,群號: 687779078,歡迎大家加入。