國內文章
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直接被打滿了,讓我幫忙看下怎麼回事,截圖如下:
看了下是兩個相同的程序,既然被打滿了那就抓一個 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 博客
關於 .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 函數:映射和使用指南
如何在 Entity Framework Core 中映射和使用 PostgreSQL 自定義函數。
【英文】通過單元測試創建和導航加速您的測試工作流程 | JetBrains 博客
介紹 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 會導致版本不一致。
版權聲明
- 國內板塊由 InCerry 進行整理 : https://github.com/InCerryGit/WeekRef.NET
- 其餘內容來自 Myuki WeekRef,由InCerry翻譯(已獲得授權) : https://github.com/mayuki/WeekRef.NET
由於筆者沒有那麼多時間對國內的一些文章進行整理,歡迎大家爲《.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,歡迎大家加入。
抽獎送書活動預熱!!!
感謝大家對我公衆號的支持與陪伴!爲慶祝公衆號一週年,抽獎送出一些書籍,請大家關注公衆號後續推文!