.NET週刊【12月第1期 2023-12-06】

國內文章

.NET 與 OpenEuler 共展翅,昇騰九萬里

https://www.cnblogs.com/shanyou/p/17858385.html

本文介紹了openEuler操作系統,它支持多處理器架構,包括X86、ARM等,並計劃支持更多芯片架構。openEuler社區正通過場景化的特別興趣小組(SIG)擴展應用範圍,覆蓋服務器、雲計算、邊緣計算到嵌入式等多個場景。作者曾推廣歐拉運行.NET Core,因其對ARM的優秀支持獲得華爲雲MVP。同時,文章提到微軟.NET Framework的開源歷程,.NET Core遵循ECMA標準,現已成爲全場景開發平臺。中國.NET社區的發展需要優質開源社區支持,openEuler爲合作伙伴提供了機會。2023中國.NET開發者峯會將展示科技進步,openEuler作爲贊助商參與,邀請更多贊助者加入。

MAUI Blazor 如何通過url使用本地文件

https://www.cnblogs.com/Yu-Core/p/17855661.html

本文提出了在MAUI Blazor應用中顯示本地媒體文件的新方法。文章首先指出了之前方案的不足,如不同平臺URL不統一、音視頻文件無法播放、Windows上大文件顯示限制和iOS/Mac的跨域問題。隨後,文章介紹瞭如何通過修改項目文件和添加處理ContentType的靜態類來完善方案。具體包括在.csproj文件中配置基於文件名的多目標,以及創建StaticContentProvider.cs來獲取文件ContentType。這樣,可以在前端統一使用特定格式的URL來顯示或播放本地的圖片和視頻文件。

【譯】Visual Studio 2022 - 17.8 的性能改進

https://www.cnblogs.com/MeteorSeed/p/17851304.html

Visual Studio 2022 17.8版本帶來了性能提升,包括異步文件打開、改進Razor/Blazor響應性、加速F5、優化C++虛幻引擎智能感知和加快非SDK風格.NET項目構建。這些更新提高了編碼效率,特別是在處理大文件和複雜項目時。用戶可通過設置特定屬性來啓用非SDK項目的構建加速。微軟鼓勵用戶反饋,以進一步優化Visual Studio體驗。

.NET中有多少種定時器

https://www.cnblogs.com/czwy/p/17862702.html

本文介紹了.NET中的六種定時器,分爲UI定時器和UI無關定時器。UI定時器包括WinForm、WPF和WebForm的定時器,它們在UI線程上執行,簡化了線程安全問題。WinForm定時器簡單易用,但精度不高;WPF定時器基於Dispatcher,精度不準確,可能延遲;WebForm定時器通過Javascript和服務端回調實現,保證單一異步回調。UI無關定時器適用於後臺任務,不涉及UI操作,從.NET 6開始有三種。每種定時器根據應用場景選擇,以滿足不同的精度和線程安全需求。

.net下功能強大的HTML解析庫HtmlAgilityPack,數據抓取必備

https://www.cnblogs.com/hanbing81868164/p/17856515.html

本文介紹了HtmlAgilityPack,這是一個.NET平臺的HTML解析庫,能將HTML轉換爲DOM對象,支持XPath查詢並提供API進行HTML操作。安裝HtmlAgilityPack需通過Visual Studio的NuGet包管理器。使用時,先加載HTML到HtmlDocument對象,再通過XPath獲取DOM節點,可進行節點修改,如改屬性或內容。還能將DOM對象轉換回HTML文本。文中舉例說明了如何獲取頁面標題、所有圖片和鏈接。

ASP.NET Core Web API設置響應輸出的Json數據格式的兩種方式

https://www.cnblogs.com/Can-daydayup/p/17860547.html

本文講述了在ASP.NET Core Web API中設置Json響應格式的方法。介紹了兩種JSON序列化庫:內置的System.Text.Json和功能強大的Newtonsoft.Json。文章指出,可以全局配置Json屬性名稱序列化方式和日期格式,以滿足前端需求。通過示例展示了未配置前的API輸出Json數據,並介紹瞭如何使用System.Text.Json進行全局配置,以自定義時間輸出格式。

一篇學會cron表達式

https://www.cnblogs.com/goodtimeggb/p/17862867.html

本文介紹了Cron表達式,這是一種在Unix系統中用於定時任務的字符串格式,包含六個字段,用空格分隔。通過數字和特殊字符定義執行時間,如"*"代表所有值,"-"定義範圍。文中提供了Cron表達式的示例,並介紹了在.NET中使用NCrontab和Quartz庫來解析和執行Cron表達式的方法。NCrontab不支持秒級,而Quartz支持,適合需要精確控制的任務。

編程技巧 --- VS如何調試.Net源碼

https://www.cnblogs.com/pandefu/p/17860440.html

本文講述了在VS2022中調試.Net源碼的方法。首先,需要在"工具"-"選項"-"文本編輯器"-"C#"-"高級"-"轉到定義"中勾選所有選項以查看源碼。其次,要啓用源代碼單步執行,包括取消選擇"啓用僅我的代碼",選擇"啓用源鏈接支持",並在"符號"下選擇"Microsoft 符號服務器"。配置後,首次啓動應用時會有符號加載時間。通過這些設置,可以在"調用堆棧"窗口中下載和加載符號進行源碼調試。文章還建議通過實踐提升調試技巧,以便更好地理解框架工作原理和提高解決BUG的效率。

小心C#中的只讀結構體成員

https://www.cnblogs.com/broadm/p/17862169.html

本文講述了C#中結構體的只讀屬性對代碼行爲的影響。通過示例展示了將結構體成員設爲只讀後,嘗試修改其字段值時,編譯器不報錯但修改不成功,因爲只讀機制會導致字段值在堆棧上拷貝。這種隱蔽的行爲可能引發BUG,如自旋鎖示例中的計數錯誤。文章建議在結構體或字段需要只讀時,使用readonly關鍵字直接修飾,以避免潛在問題。

C# 泛型編譯特性對性能的影響

https://www.cnblogs.com/tansm/p/CSharp-Generic-Performance.html

本文探討了C#中泛型的編譯行爲,特別是結構和類作爲泛型參數時對性能的不同影響。結構作爲值類型,存儲在棧上,泛型參數爲結構時編譯器生成特定實現,提升性能,減少裝箱拆箱。類作爲引用類型,存儲在堆上,泛型參數爲類時編譯器生成通用實現,可能導致性能下降。性能測試顯示結構類型泛型參數性能較高,類類型泛型參數性能略低。

中間件IIS監控指標、配置和Windbg調試分析

https://www.cnblogs.com/tianqing/p/17864122.html

本文介紹了中間件IIS的監控指標和配置最佳實踐。關鍵性能計數器包括Web服務的當前連接數、每秒請求數等,ASP.NET的請求執行時間、請求排隊數等,以及CPU和內存的使用情況。最佳實踐建議定期回收應用程序池,合理設置工作進程數,啓用輸出和靜態內容緩存,以及壓縮以提升性能。監控和日誌記錄需適度,安全設置要定期更新。IIS請求隊列是處理前臨時存放請求的地方,監控請求隊列的性能計數器有助於優化隊列設置,如增加工作進程數、優化代碼和調整隊列長度,以減少等待時間,確保請求快速處理。通過這些措施,可以優化IIS服務器性能。

設計模式(十五)解釋器

https://www.cnblogs.com/WinterSir/p/17506255.html

本文介紹瞭解釋器模式,這是一種用於構建語言解釋器的設計模式,包含抽象表達式、終結符表達式、非終結符表達式和環境類四個角色。通過這些角色,可以解釋和執行用戶根據特定文法編寫的代碼。文中以X公司開發的字符界面格式化指令爲例,展示瞭如何使用解釋器模式處理指令並輸出格式化內容。環境類存儲指令,抽象節點類負責解釋語句和執行命令。

C#簡化工作之實現網頁爬蟲獲取數據

https://www.cnblogs.com/mingupupu/p/17860491.html

本文介紹了使用C#編寫網頁爬蟲來獲取網站上的氣象信息。網站共有67頁氣象數據,手動複製粘貼效率低下。通過構建每一頁的URL併發送GET請求,成功抓取並存儲了4萬多條數據到數據庫。

主題

C# 日曆 | 降臨節日曆 2023 - Qiita

https://qiita.com/advent-calendar/2023/csharplang

2023 年 C# 降臨節日曆目前正在進行中。

NUnit 4.0.1 | 框架版本 | NUnit 文檔

https://docs.nunit.org/articles/nunit/release-notes/framework.html#nunit-401---december-2-2023

NUnit 4.0.0/4.0.1 已發佈。

它包括許多改進和修復,例如對 TestCaseSource 的異步支持、對 .NET 6 目標的支持和測試取消 (CancelAfter),以及刪除 .NET Framework 3.5、4.0、4.5 和 .NET Core 2.1 等目標.ing.

宣佈 ML.NET 3.0 - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-ml-net-3-0/

ML.NET 3.0已發佈。

此版本包括對象檢測 API、問答 (QA) 和命名實體提取 (NER)、Intel oneDAL 硬件訓練加速、AutoML 改進、DataFrame 更新、Tensor 原語集成等。

發佈 v2.5.140 · MessagePack-CSharp/MessagePack-CSharp

https://github.com/MessagePack-CSharp/MessagePack-CSharp/releases/tag/v2.5.140

MessagePack v2.5.140 已發佈。

此版本修復了 Mono 運行時中的錯誤。

2023 年的開發者生態系統:C# 的主要趨勢 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/11/30/the-developer-ecosystem-in-2023-key-trends-for-csharp/

JetBrains 的 C# 開發者生態系統趨勢研究。

ASP.NET Core使用的功能、C#版本、開發目標、IDE/編輯器、插件的使用等

ReSharper 2023.3 候選版本現已推出 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/11/29/the-resharper-2023-3-rc/

ReSharper 2023.3 候選版本已發佈。

AI 助手增強功能、C# 12 支持、實體框架探索和圖表繪製、UI 改進、改進的 Razor 格式化引擎、用於單元測試的 AI 生成、新語法和拼寫檢查器等等。

Rider 2023.3 候選版本現已推出 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/11/29/the-rider-2023-3-rc/

Rider 2023.3 候選版本已發佈。

包括各種新功能,例如 AI Assistant 增強功能、對 .NET 8 SDK(包括 C# 12 和 F# 8)的支持、改進的多項目啓動、類型依賴關係圖、預測調試、單元測試的 AI 生成等等。

六項工作:發佈 ImageSharp 3.1.0

https://sixlabors.com/posts/announcing-imagesharp-310/

ImageSharp 3.1.0 已發佈。

此版本包括對動畫 WebP 和 PNG 的支持、對 Quite Ok (Qoi) 的支持、改進的解碼器可靠性以及各種性能改進。

文章、幻燈片等

最少使用 Blazor Web App 的 OAuth 身份驗證 (ASP.NET Core 8.0)

https://zenn.dev/tetr4lab/articles/1946ec08aec508

瞭解如何在 .NET 8 中的 Blazor Web App 中實現 Google OAuth 身份驗證。

從 BitmapSource 轉換爲 Bitmap 的最佳實踐

https://zenn.dev/nuits_jp/articles/2023-12-03-convert-bitmapsource-to-bitmap

介紹一個在WPF中從BitmapSource轉換爲Bitmap的好方法。

[無需 Mac] 輕鬆調試 .NET MAUI iOS 應用程序並將其部署到 iPhone 的步驟 - Qiita

https://qiita.com/kami_teru/items/b2a6bd77f7c836ae3d1e

如何在實際設備(例如 iPhone)上從僅在 Windows 上的 Visual Studio 調試和執行 .NET MAUI iOS 應用程序。

如何使用 .Net8 Blazor WASM 創建 ASP.Net Core 託管配置

https://zenn.dev/vigilanteyu/articles/d7a47dff63e8e2

如何在 .NET 8 中實現與 Blazor WebAssembly 的 ASP.NET Core Hosted 等效的配置,該配置一直存在於 .NET 7 中。

Visual Basic 2023 回顧 - Qiita

https://qiita.com/yaju/items/97c7d6ae94a303bdbb5b

今年 Visual Basic 主題的綜述,包括 Visual Basic .NET。

使用 IndexedDB 在 .NET MAUI Blazor 混合應用程序中存儲本地數據 - 第 1 部分

https://dev.to/icebeam7/storing-local-data-in-a-net-maui-blazor-hybrid-app-using-indexeddb-part-1-3hn2

瞭解如何使用 IndexedDB 在 .NET MAUI Blazor 混合應用中存儲本地數據。

我評估了 ImageMagick、ImageSharp 和 System.Drawing 的性能

https://zenn.dev/nuits_jp/articles/2023-12-01-imagemagic-imagesharp-benchmarks

圖像處理庫 Magick.NET (ImageMagick)、ImageSharp 和 System.Drawing 的性能比較。
本文比較了 .NET Framework 和 .NET 8 之間的解碼、裁剪和二值化處理。

.NET 8.0 如何將 AIS.NET 性能提升 27% | endjin

https://endjin.com/blog/2023/11/how-dotnet-8-boosted-ais-dotnet-performance-by-27-percent-for-free

瞭解在 .NET 8 中運行 AIS.NET(一個用於分析 AIS 解碼器(AIS 是船舶無線電消息)的庫)時的顯着性能改進。

Visual Studio 17.8 中我最喜歡的功能 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/my-favorite-features-in-visual-studio-17-8/

介紹 Mads Kristensen 推薦的 Visual Studio 2022 版本 17.8 的新功能。

本文重點介紹了保留大小寫的搜索和替換以及豐富的拉取請求體驗等功能。

[LogProperties] 和新的遙測日誌源生成器背後

https://andrewlock.net/behind-logproperties-and-the-new-telemetry-logging-source-generator/

.NET 8 提供的 Microsoft.Extensions.Telemetry.Abstractions 中包含的“LogProperties”屬性的說明,該屬性將屬性值保留在日誌中。

[All] LINQ,這種情況下會發生什麼? [空數組怎麼辦? ] - 奇塔

https://qiita.com/RyotaMurohoshi/items/bf45f4e7d52e6aad8ef7

C# 降臨節日曆 2023 年第 1 天文章。解釋極端情況,例如在空數組上執行 LINQ All 的結果以及存在綁定元素時 OrderBy 的結果。

在 VSCode 2023 中的 C# 中更改塊 {} 之前和之後的換行符 | Aqua Ware Tweet 博客

https://aquasoftware.net/blog/?p=1975

C# 2023 年降臨節日曆第 2 天文章。如何在 C# 代碼格式設置中設置大括號之前和之後的開口。

C# 標記在跨平臺開發中的興起

https://platform.uno/blog/the-rise-of-c-markup-for-cross-platform-development/

C#標記介紹,是Uno Platform的UI描述方法在C#中。

C# 開發套件熱重載

https://www.poppastring.com/blog/hot-reload-for-c-dev-kit

如何在 Visual Studio Code 的擴展 C# 開發工具包中啓用實驗性功能熱重載。

使用 OmniSharp-Vim 顯示代碼風格分析結果,例如 IDE0001 - Qiita

https://qiita.com/lx-sasabo/items/4ceb7be5e2721e4e52f8

如何使用 OmniSharp-Vim 顯示來自分析器等的代碼分析結果。

如何在 .NET 8 中的 Blazor 中將 JavaScript 與靜態服務器渲染 (SSR) 結合使用

https://zenn.dev/microsoft/articles/aspnetcore-blazor-dotnet8-jsinterop

瞭解如何在 .NET 8 中將靜態服務器渲染 (SSR) 與 Blazor 結合使用時實現和運行自定義 JavaScript。

.NET 的 HttpClient Timeout 指的是什麼超時? | @jsakamoto

https://devadjust.exblog.jp/29756261/

解釋可以在 HttpClient 上設置的超時實際上如何工作。

將最小的 ASP.NET Web 服務器嵌入到桌面應用程序中

https://weblog.west-wind.com/posts/2023/Nov/27/Embed-a-minimal-ASPNET-Web-Server-into-a-Desktop-Application

如何在桌面應用程序中包含最小的 ASP.NET Core 服務器。

[C#] 嘗試 FakeTimeProvider 和 FakeLogger - TekuMemo

https://aneuf.hatenablog.com/entry/2023/11/27/210000

引入“FakeTimeProvider”,它是 .NET 8 中引入的“ITimeProvider”的僞造實現,以及“FakeLogger”,它是新引入的“ILogger”的僞造實現。

[C#] 集合表達式:嘗試使用具有唯一類型的集合表達式(CollectionBuilder 屬性) - TekuMemo

https://aneuf.hatenablog.com/entry/2023/11/24/210000

關於“CollectionBuilderAttribute”,它用自己的類型實現 C# 12 集合表達式,以及如何使用它來實現它。

[C#] 什麼是依賴注入? - Annulus Games

https://annulusgames.com/blog/dependency-injection/

關於依賴注入的說明。服務定位器及其問題、使用 Microsoft.Extensions.DependencyInjection 作爲 DI 容器的各種示例、除 M.E.DI 之外的 .NET/Unity DI 容器的介紹等。

庫、存儲庫、工具等。

thomhurst/ModularPipelines:用 C# 編寫管道!

https://github.com/thomhurst/ModularPipelines

一個框架,它組合模塊來創建用於某種處理/工作的管道。

nenoNaninu/AspNetCore.SignalR.OpenTelemetry:這是一個檢測庫,用於檢測 ASP.NET Core SignalR 並收集有關 SignalR 集線器方法調用的指標和跟蹤。

https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry

用於將 SignalR 指標流式傳輸到 OpenTelemtry 的庫。

https://x.com/nenomake/status/1730229080455303389?s=12

調試輸出過濾器 - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=GrantDavies.NiahTextFilter2022

Visual Studio 擴展允許您歷史記錄和過濾調試輸出。

網站、文檔等

推文

故事是我能夠使用 Avalonia XPF(Avalonia 的跨平臺 WPF 兼容性套件)在瀏覽器中運行 PerfView。

https://twitter.com/AvaloniaUI/status/1729403695392059887

image-20231212220751740


定義空類或接口時,使用“;”聲明它而不使用主體會很方便。

https://x.com/sergiopedri/status/1730233715345826173?s=12

image-20231212220825932


關於在分析時啓動應用程序時暫停分析的功能。

https://x.com/vs_debugger/status/1730647909279166974?s=12

image-20231212220904913


一個關於使用 Ghidra 腳本使本機 AOT 字符串搜索成爲可能的故事。

https://x.com/washi_dev/status/1725270583011688726?s=12

image-20231212220937562


PolySharp 現已提供適用於 C# 12 的新 polyfill。

https://x.com/sergiopedri/status/1729878697824698514?s=12

image-20231212221030184


[InlineArray] 的最大值爲 1MB

https://x.com/hypeartistmusic/status/1728123597968011688?s=12&t=ggvrrZ7oLogHyNoIGNgjbw

image-20231212221115138

Image

Image

深入探索

[API 提案]:引入新的內存緩存庫 · 問題 #4766 · dotnet/extensions

https://github.com/dotnet/extensions/issues/4766

提議引入一種名爲 RCache 的新型內存高效內存緩存。

版權聲明

由於筆者沒有那麼多時間對國內的一些文章進行整理,歡迎大家爲《.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,歡迎大家加入。

image-20230703203249615

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章