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

國內文章

NativeBuferring,一種零分配的數據類型(上篇)

https://www.cnblogs.com/artech/p/17586781.html

之前一個項目涉及到針對海量(千萬級)實時變化數據的計算,由於對性能要求非常高,我們不得不將參與計算的數據存放到內存中,並通過檢測數據存儲的變化實時更新內存的數據。存量的數據幾乎耗用了上百G的內存,再加上它們在每個時刻都在不斷地變化,所以每時每刻都無數的對象被創建出來(添加+修改),同時無數現有的對象被“廢棄”(刪除+修改)。這種情況針對GC的壓力可想而知,所以每當進行一次2代GC的時候,計算的耗時總會出現“抖動”。爲了解決這類問題,幾天前嘗試着創建了一個名爲NativeBuffering的框架。目前這個框架遠未成熟,而且是一種“時間換空間”的解決方案,雖然徹底解決了內存分配的問題,但是以犧牲數據讀取性能爲代價的。這篇文章只是簡單介紹一下NativeBuffering的設計原理和用法,並順便收集一下大家的建議。[本文演示源代碼從這裏下載]

NativeBuferring,一種零分配的數據類型(下篇)

https://www.cnblogs.com/artech/p/17587660.html

這篇文章是關於NativeBuffering,一種零分配的數據類型,它可以用來高效地處理緩衝字節序列。文章介紹了NativeBuffering支持的兩種基本數據類型:Unmanaged和IReadOnlyBufferedObject,以及它們的集合和字典類型。文章還介紹瞭如何利用Source Generator生成BufferedMessage類型,以及如何通過無限嵌套的形式定義一個具有任意結構的數據類型。文章的目的是讓讀者瞭解NativeBuffering的設計原理和使用方法。

揭祕 .NET 中的 TimerQueue(下)

https://www.cnblogs.com/eventhorizon/p/17609210.html

關於.NET中的TimerQueue的文章,它是一個用於管理定時任務的類。文章主要介紹了以下內容:

  • TimerQueue是如何與操作系統的定時器進行交互的,包括註冊、取消、設置和回調等細節。
  • TimerQueue是如何在刪除數據時維持B樹的平衡性的,包括從葉子節點和非葉子節點刪除數據,以及提前擴充只有t-1個Item的節點的三種方法:從左兄弟節點借用Item,從右兄弟節點借用Item,與左兄弟節點或右兄弟節點合併。
  • TimerQueue是如何實現最值的刪除的,包括最小值和最大值的查找和刪除。
  • 作者還提供了完整的代碼實現和性能測試,與優先隊列PriorityQueue進行了比較。

重返照片的原始世界:我爲.NET打造的RAW照片解析利器

https://www.cnblogs.com/sdflysha/p/20230801-sdcb-libraw-intro.html

這篇文章介紹了作者如何爲.NET打造了一個RAW照片解析的庫,基於libraw這個開源項目。文章主要包括以下幾個方面:

  • 作者介紹了RAW照片的概念和優勢,以及libraw的功能和特點。
  • 作者展示瞭如何使用他的庫Sdcb.LibRaw來將RAW照片轉換爲Bitmap或者其他格式的圖像,以及如何獲取支持的相機列表。
  • 作者解釋了他的庫的架構和設計思路,以及如何使用PInvoke來封裝libraw的C API。
  • 作者提供了一些示例代碼和截圖,以及一些相關的下載鏈接和參考資料。

文章的目的是幫助.NET開發者更好地理解和使用RAW照片,以及展示作者的開源項目。

你真的知道嗎?catch、finally和return哪個先執行

https://www.cnblogs.com/rupeng/p/17599580.html

我的一位朋友前陣子遇到一個問題,問題的核心就是try……catch……finally中catch和finally代碼塊到底哪個先執。這個問題看起來很簡單,當然是“catch先執行、finally後執行”了?真的是這樣嗎?

堆 Heap & 棧 Stack(.Net)【概念解析系列_3】【C# 基礎】

https://www.cnblogs.com/hnzhengfy/p/GNJXXL_HeapStack.html

本文主要圍繞 .Net 框架中的託管堆(Heap,簡稱堆)和堆棧(Stack,簡稱棧)展開。

.Net 程序在 CLR(Common Language Runtime 公共語言運行時)上運行時,內存被從邏輯上劃分爲兩個主要部分:堆和棧。除了棧和堆之外,CLR 還維護了其他一些內存區域,例如靜態存儲區域(Static Storage Area)、常量存儲區域(Constant Storage Area)等。這些內存區域都有各自的特點和用途,可以幫助我們更好地管理程序內存和資源的使用。

因此,熟知堆和棧的運行機制,對提升系統性能和穩定性至關重要。

記一次 .NET某培訓學校系統 內存碎片化分析

https://www.cnblogs.com/huangxincheng/p/17602611.html

前些天有位朋友微信上找到我,說他們學校的Web系統內存一直下不去,讓我看下到底是怎麼回事,老規矩讓朋友生成一個dump文件丟給我,看一下便知。

記一次 .NET 某物流API系統 CPU爆高分析

https://www.cnblogs.com/huangxincheng/p/17593608.html

前段時間有位朋友找到我,說他程序CPU直接被打滿了,讓我幫忙看下怎麼回事,截圖如下:

img

看了下是兩個相同的程序,既然被打滿了那就抓一個 dump 看看到底咋回事。

.NET Core WebAPI中使用Swagger(完整教程)

https://www.cnblogs.com/kimiliucn/p/17602073.html

這篇文章介紹瞭如何使用Swagger來生成和測試Web API的文檔,以及如何自定義Swagger UI的界面和功能。文章主要包括以下幾個部分:

  • Swagger的概念和優勢,以及它與Open API和Restful API的關係。
  • 如何在.NET Core項目中安裝和配置Swashbuckle.AspNetCore包,以及如何生成JSON格式的Swagger文檔。
  • 如何在項目中啓用Swagger UI,並修改默認的啓動URL。
  • 如何在代碼中添加XML註釋,以便在Swagger UI中顯示更多的信息和說明。
  • 如何自定義Swagger UI的樣式和主題,以及如何添加授權功能。

文章還提供了一些示例代碼和截圖,以及一些相關的下載鏈接和參考資料。文章的目的是幫助開發者更好地理解和使用Swagger來構建和測試Web API。

【.NET6 + Vue3 + CentOS7.9 + Docker + Docker-Compose + SSL】個人博客前後端運維部署

https://www.cnblogs.com/lujiesheng/p/17599850.html

這篇文章介紹瞭如何使用Docker和Docker Compose來部署個人博客的前後端和運維服務。文章主要包括以下幾個步驟:

  • 在騰訊雲輕量應用服務器上安裝和配置CentOS 7.6,設置防火牆和域名解析,申請SSL證書,創建容器鏡像服務。
  • 在服務器上安裝和啓動Docker和Docker Compose,準備部署目錄和配置文件,創建nginx、ui、api、portainer等服務。
  • 在本地使用VS2022打包.NET6 API鏡像,推送到騰訊雲容器倉庫,然後在服務器上拉取並啓動。
  • 使用docker-compose命令來管理服務的啓動、停止、重啓等操作,查看服務的狀態和網絡。

文章還提供了一些示例代碼和截圖,以及一些相關的下載鏈接和參考資料。

C#.NET 國密SM2 加密解密 與JAVA互通 ver:20230805

https://www.cnblogs.com/runliuv/p/17607568.html

如標題所示,本文介紹了國密SM2 .NET 如何與 JAVA互通。

.NET 環境:.NET6 控制檯程序(.net core)。

JAVA 環境:JAVA8,帶maven 的JAVA控制檯程序。

主題

【英文】發佈 ILSpy 8.1 icsharpcode/ILSpy

https://github.com/icsharpcode/ILSpy/releases/tag/v8.1

ILSpy 8.1 已發佈。

此版本包括對一些 C# 11 符號的支持和各種修復。

【英文】宣佈推出 Visual Studio Code 的 Unity 擴展 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/announcing-the-unity-extension-for-visual-studio-code/

Visual Studio Code 的 Unity 擴展現已推出預覽版。

該擴展基於 C# 開發套件構建,支持代碼編輯的 AI 輔助、Roslyn 分析器和 Unity 中的遊戲調試等功能。文章還介紹瞭如何在Unity中使用。

該擴展還以與 C# 開發工具包相同的許可模式提供,並且需要 Visual Studio Community 許可證或訂閱。

【英文】Rider 2023.2:更好的 C# 支持、UX/UI 增強、AI 驅動的功能等等 | JetBrains 博客

https://blog.jetbrains.com/dotnet/2023/08/02/rider-2023-2-release/

Rider 2023.2 已發佈。

  • C# 更新

  • 改進的用戶界面/用戶體驗

    • 改進的構建工具窗口
    • 默認外觀是新的用戶界面
    • 定製和簡化
      • 固定項目標題、主工具欄自定義、運行配置
  • 人工智能輔助(訪問受限)

  • 版本控制

    • GitLab 集成
    • 後臺提交檢查
    • 行提交選項
  • 性能改進

    • 減少緩存數據(減少 I/O)
  • 遊戲開發

    • Unity AI 協助、ShaderLab 支持、Unity DOTS 支持
    • 虛幻引擎
      • 改進的藍圖索引、熱重載和實時編碼、更好的 Perforce 支持 .NET SDK
    • 重新啓動源生成器模板和源生成器
    • Docker快速模式
    • .NET MAUI 熱重載

【英文】ReSharper 2023.2:更多 C#、C++ 20 和 C++ 23 功能、創建和導航單元測試的能力、預測調試器模式等等 | JetBrains 博客

https://blog.jetbrains.com/dotnet/2023/08/02/resharper-2023-2-release/

ReSharper 2023.2 已發佈。

  • C# 更新
  • C++ 更新
  • 性能改進
    • 減少解決方案加載時間
  • 單元測試創​​建和導航
  • 人工智能輔助(訪問受限)
  • 預測調試器(測試版)
  • 反編譯器中的程序集差異

【英文】.NET Conf 2023 - 慶祝 .NET 8 的發佈! - .NET 博客

https://devblogs.microsoft.com/dotnet/dotnet-conf-2023-celebating-the-release-of-dotnet-8-save-the-date/

關於 .NET Conf 2023 的公告。

.NET Conf 2023 將於 11 月 14 日至 16 日舉行,爲期三天,包括各種會議,包括 .NET 8 的發佈。

【英文】Microsoft 作者簽名證書將於 2023 年 8 月 14 日更新 - NuGet 博客

https://devblogs.microsoft.com/nuget/microsoft-author-signing-certificate-update-2023/

用於簽署微軟發佈的NuGet包的證書將在8月14日之後更新。

現有軟件包不會通過此支持進行更新,未來的軟件包將使用新證書進行簽名。

如果您擁有並驗證 NuGet 客戶端策略中的受託人允許列表,則會受到影響。

【英文】dotCover、dotMemory、dotPeek 和 dotTrace 2023.2 發佈!| JetBrains 博客

https://blog.jetbrains.com/dotnet/2023/08/02/2023-2-dottools-release/

dotCover、dotMemory、dotPeek、dotTrace、dotMemory 2023.2

  • Rider 中的快照分析

  • dotTrace
    * 採樣、跟蹤、按線程分組的逐行快照
    * Linux 和 macOS 上的源代碼查看工具窗口

  • dotPeek

    • 組件比較
  • dotCover

    • 錯誤修復和穩定性改進

文章、幻燈片等

【英文】C# 12 攔截器!

https://dev.to/bugandfix/c-12-interceptors-an-insane-feature--517l

一篇關於在 C# 12 中運行攔截器的文章。

【英文】哪個 RDBMS 具有最快的 .NET Bulk Insert 實現?

https://servicestack.net/posts/bulk-insert-performance

不同 RDBMS 和架構/操作系統之間批量插入的性能比較。

【英文】C# 中的類與結構:做出明智的選擇 - NDepend

https://blog.ndepend.com/class-vs-struct-in-c-making-informed-choices/

總結類和結構的優缺點並決定使用哪一種。

【日文】C# 將數據庫提供程序合併到通用主機 DI - Qiita

https://qiita.com/mxProject/items/232ee4d0feb30a41a2f3

如何在 Generic Host 的服務中嵌入和使用數據庫提供程序 (ADO.NET)。

【英文】ASP.NET Core 中的插件架構 – 如何掌握它

https://dev.to/devleader/plugin-architecture-in-aspnet-core-how-to-master-it-1824

如何在 ASP.NET Core 應用程序中實現插件架構。

【英文】.NET8 依賴注入中的鍵控服務

https://dev.to/xelit3/keyed-services-in-net8s-dependency-injection-2gni

關於 .NET 8 中的 M.E.DependencyInjection 以及 ASP.NET Core 中支持的鍵控服務。

【英文】在 EFCore 中利用自定義 PostgreSQL 函數:映射和使用指南

https://gor-grigoryan.medium.com/leveraging-custom-postgresql-functions-in-efcore-a-guide-to-mapping-and-usage-53941b10fe89

如何在 Entity Framework Core 中映射和使用 PostgreSQL 自定義函數。

【英文】通過單元測試創​​建和導航加速您的測試工作流程 | JetBrains 博客

https://blog.jetbrains.com/dotnet/2023/08/01/acceleating-your-testing-workflow-with-unit-test-creation-and-navigation/

介紹 ReSharper 中的單元測試創​​建和導航功能。它介紹了可用於在代碼之間導航和創建新單元測試的函數。

【日文】使用VisualStudio.Extensibility-Qiita進行擴展開發介紹

https://qiita.com/mngreen/items/d712930b5894aa6ea17f

引入使用 Visual Studio.Extensibility(Visual Studio 的新擴展模型)的擴展實現。

【英文】基於命令行的 .NET 應用程序

https://dev.to/asimmon/instrumenting-systemcommandline-based-net-applications-1p88

如何使用 System.CommandLine 將自定義工具合併到您的應用程序中。

【日文】DateTime.MaxValue 翻譯錯誤 - Qiita

https://qiita.com/hiro_t/items/0a8e5ce1c1552366a8f4

關於DateTime.MaxValue日文文檔解釋中的錯誤。

【英文】C# 中的 ImmutableArray<T> 迭代性能

https://antao-almada.medium.com/immutablearray-t-iteration-performance-in-c-99e490d4d352

ImmutableArray<T> 上枚舉操作的性能。與列表、數組等的比較

【英文】學習 Resharper PostFix 和源模板

https://dev.to/karenpayneoregon/learn-resharper-postfix-and-source-templates-32lo

如何使用和創建 ReSharper 和 Rider 中提供的 postfix 部署模板。

【英文】爲所有 ASP.NET Core 生成站點地圖

https://khalidabuhakmeh.com/generate-sitemaps-for-all-of-aspnet-core

如何使用 DotnetSitemapGenerator 在 ASP.NET Core Web 應用程序中生成站點地圖 (XML)### 將異常轉化爲問題詳細信息響應
https://timdeschryver.dev/blog/translated-exceptions-into-problem-details-responses

ASP.NET Core 如何將異常轉換爲問題詳細信息響應並返回它。

【英文】.NET 8 時間提供程序和單元測試

https://khalidabuhakmeh.com/dotnet-8-timeprovider-and-unit-tests

瞭解 .NET 8 中引入的 TimeProvider API 以及如何使用它編寫單元測試。

【英文】釋放 .NET 源代碼生成器的力量

https://medium.com/@bnayae/unleashing-the-power-of-net-source-code-generators-3115156df775

使用源生成器的庫簡介。本文介紹了 Refit、System.Text.Json、Dunet、Mapperly 和 Generator.Equals。

【英文】我在 ASP.NET Core 應用程序中嘗試了 Application Insights 的代碼優化功能

https://blog.shibayan.jp/entry/20230805/1691227089

如何將 Application Insights 代碼優化應用於 ASP.NET Core 應用程序。

代碼優化包括基於人工智能的應用程序性能問題檢測/建議。

【日文】.NET中基於長度的switch分支調度

https://ufcpp.net/blog/2023/8/lengthbasedswitch/

自 Roslyn 4.6 以來,關於字符串分支的 switch 分支以新的方式進行。

【日文】.NET 中的 WebSocket 和處理斷開連接 -castaneai 的博客

https://castaneai.hatenablog.com/entry/closing-websocket-connection-in-dotnet

關於 .NET WebSocket 中的斷開連接處理。關於CloseAsync、CloseOutputAsync和Dispose等方法之間的區別。

【日文】[C#] [備忘錄] 設置爲在 build-Qiita 期間不輸出不必要的語言文件夾

https://qiita.com/minoura_a/items/092b141bc6ecde5bbb24

如何避免在構建時包含不必要的語言本地化資源。

【日文】在 Azure Functions (.NET 6) 項目中升級 NuGet 包引用時出錯 | @jsakamoto

https://devadjust.exblog.jp/29654451/

關於更新Azure Functions (.NET 6)項目的NuGet包時發生的錯誤。

在進程內模式下運行時,Azure Functions 運行時使用 Microsoft.Extensions.* 6.0,因此在應用程序依賴的包中更新到 7.0 會導致版本不一致。

版權聲明

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

格式如下:

  • 10~50字左右的標題
  • 對應文章或項目網址訪問鏈接
  • 200字以內的簡介,如果太長會影響閱讀體驗

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

.NET性能優化交流羣

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

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

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

如果提示已經達到200人,可以加我微信,我拉你進羣: lishi-wk

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

抽獎送書活動預熱!!!

感謝大家對我公衆號的支持與陪伴!爲慶祝公衆號一週年,抽獎送出一些書籍,請大家關注公衆號後續推文!

image-20230703203249615

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