.NET週刊【10月第2期 2023-10-08】

國內文章

起風了,NCC 雲原生項目孵化計劃

https://www.cnblogs.com/liuhaoyang/p/ncc-the-wind-rises.html

2016年,我和幾位朋友發起了.NET Core中文學習組和ASP.NET Core文檔翻譯項目,隨後創建了.NET Core Community開源社區,吸引了近30個優秀的開源項目加入。然而,隨着時間的推移,社區的活躍度逐漸降低。現在,我們計劃發起名爲"wind rises"的項目孵化,以彌補.NET平臺上缺少雲原生基礎設施項目的遺憾。我們規劃了使用.NET開發的"可觀測性平臺"和"分佈式應用框架"兩個項目。其中,"可觀測性平臺"已經完成項目原型的開發,計劃在年底發佈第一個版本。"分佈式應用框架"還在原型討論階段,初步的想法是提供一個可插拔的應用框架。

.NET 數據庫大數據操作方案(插入、更新、刪除、查詢 、插入或更新)

https://www.cnblogs.com/sunkaixuan/p/17747938.html

本文介紹了SqlSugar的各種功能。SqlSugar是一種ORM工具,它優化了實體轉換的性能,並使用數據庫的最佳API。它提供了BulkCopy、BulkUpdate、BulkMerge、BulkQuery、BulkDelete和Select INTO等功能。BulkCopy用於高效批量插入大量數據到數據庫,BulkUpdate用於高效批量更新數據,BulkMerge用於大規模數據的插入或更新,BulkQuery用於高效查詢,BulkDelete用於高效批量刪除數據,Select INTO用於表和表之間的數據導入。此外,SqlSugar還結合了.NET中的SqlBulkCopy類,提供了更高的性能。通過調整參數、合理使用事務、關閉索引和約束等方式,可以最大限度地提高大數據插入和更新的性能。

.NET Core使用SkiaSharp快速生成二維碼( 真正跨平臺方案)

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

在.NET 6之前,我們使用QRCoder生成二維碼,但從.NET 6開始,非Windows操作系統編譯引用代碼時會發出警告。原因是System.Drawing.Common設計爲Windows技術的簡化包裝器,跨平臺實現不佳。在非Windows環境中,官方建議使用SkiaSharp和ImageSharp等庫進行跨平臺的圖像處理操作。SkiaSharp是Mono團隊維護的開源項目,基於Google的Skia圖形庫的.NET跨平臺綁定,提供強大的2D圖形繪製和處理功能,適用於多個平臺。使用SkiaSharp可以快速生成二維碼,無需使用System.Drawing。

C# 12 中的新增功能

https://www.cnblogs.com/baibaomen-org/p/17748318.html

本文介紹了C# 12的新功能,包括主構造函數、集合表達式、默認Lambda參數等。主構造函數可以在任何class和struct中創建,不再侷限於record類型,可以初始化屬性或字段,也可以用於依賴注入和初始化基類。集合表達式引入了新的語法來創建常見的集合值,可以使用展開運算符將其他集合內聯到這些值中。默認Lambda參數允許爲Lambda表達式的參數定義默認值,語法和規則與將參數的默認值添加到任何方法或本地函數相同。這些新功能使得代碼更靈活、更強大、更可控。

一種對數據庫友好的GUID的變種使用方法

https://www.cnblogs.com/ensleep/p/17745166.html

本文討論瞭如何改造GUID以實現有序性,以提高數據庫索引效率。GUID和雪花算法是常見的唯一ID生成方案,但GUID是無序的,對數據庫索引不友好。作者提出了一種新的方法,將時間值和GUID結合,生成一個byte[],前8位放時間值,後面放GUID。在比較大小時,前端的位置優先級更高,所以,後面的GUID的無序特性會被覆蓋。然後,將其進行類似Base64的轉換,得到一個長度大概32位長度的字符串。這個字符串的字節數至少是32,但是,其具體更好的可讀性。

關於Async、Await的一些知識點

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

在ASP.NET Core中,HTTP請求到達服務器後,會被分配給線程池中的一個線程處理。如果處理方法是異步的並使用了await關鍵字,那麼在await的代碼執行完之前,該線程會被釋放回線程池處理其他請求。當await的代碼執行完畢後,會再次從線程池獲取一個線程繼續執行剩餘代碼。ASP.NET Core使用中間件管道模型處理請求,不需要使用SynchronizationContext來在異步操作完成後將執行上下文切換回原始請求上下文。這種模型提高了性能和可擴展性。SynchronizationContext和線程上下文是兩個不同的概念,前者在多線程環境中控制和協調代碼的執行,後者是與特定線程相關的一組數據或狀態信息。

【ASP.NET Core】在 Mini-API 中注入服務

https://www.cnblogs.com/tcjiaan/p/17742167.html

本文介紹了Mini API的依賴注入功能。首先,定義一個服務類MyService,然後在容器中註冊這個服務。然後,通過參數傳入服務類的實例,調用服務類的公共方法。使用httprepl工具進行Web API測試,可以直接在命令終端輸入httprepl,然後使用connect命令建立連接。發起請求時,可以用get、post、put等命令,對應HTTP的請求方式。最後,添加一個參數x,調用API時,可以直接將URL作爲命令行參數傳給httprepl工具。

.NET週刊【9月第4期 2023-09-24】

https://www.cnblogs.com/InCerry/p/dotnet_week_23_9_4.html

本文介紹了多篇關於.NET和C#的技術文章。包括介紹了“可擴展近似計數”算法,使用C#+Win32Api實現進程注入到wechat的方法,.Net 6中使用SkiaSharp生成驗證碼的過程,深度比較了幾種.NET Excel導出庫的性能差異,四個常用的序列化和反序列化庫的性能測試,.NET8中新增的特性UnsafeAccessor,C#開源的Windows系統優化工具 - Optimizer,.NET 8 的 green thread 異步模型被擱置的情況,以及兩次.NET程序內存暴漲的分析過程。這些文章涵蓋了.NET和C#的多個重要領域,包括算法、進程注入、驗證碼生成、Excel導出庫性能比較、序列化和反序列化庫性能測試、訪問私有成員、系統優化工具、異步模型以及內存分析等。

Asp-Net-Core開發筆記:快速在已有項目中引入EFCore

https://www.cnblogs.com/deali/p/17749676.html

本文以StarBlog項目爲例,介紹瞭如何在項目中引入EFCore。首先,安裝EFCore的cli工具,然後在StarBlog.Data項目中添加EFCore的依賴。接着,創建一個DbContext,這是EFCore與數據庫交互的入口。然後,使用Fluent Config方式配置數據表和字段。文章還討論了主鍵類型的選擇,包括自增、GUID、自增+GUID和Hi/Lo等幾種方式。最後,創建DesignTime配置,讓EFCore知道如何執行遷移,並使用migrations和database命令進行數據庫遷移。最後,將數據庫連接字符串寫入配置文件,完成在AspNetCore項目中集成EFCore的過程。

執行SQL語句&存儲過程的真正【神器】,不用ORM的全選它,比dapper好

https://www.cnblogs.com/digital-college/p/17747634.html

本文介紹了一個支持.Net Core(2.0及以上)與.Net Framework(4.0及以上)的工具,已被.Net圈內多家大廠採用。該工具在IDataAccess接口中提供,主要提供了執行Sql語句、執行Sp存儲過程、創建參數(輸入/輸出/返回)和事務等四大功能。它可以通過設定DatabaseType屬性,支持所有種類數據庫,包括MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Access、ODBC等。同時,它還提供了查詢多數據、選出單數據、參數等使用示例。

【算法】國慶加班,火鍋與Linq.AddRange的奇妙螺旋

https://www.cnblogs.com/lan80/p/17744494.html

在國慶假期,小悅在家享受火鍋時接到公司電話,需要處理一個關於小視頻螺旋排序算法的緊急項目。儘管感到棘手,小悅還是決定挑戰。她通過研究和實踐,逐漸掌握了螺旋排序算法的核心思想,並開始編寫代碼實現這個算法。雖然勞累,但解決問題的過程讓她感到樂趣和喜悅。最終,她成功運行出結果,心中充滿了成就感。這個國慶假期,雖然沒有休息和放鬆,但她在工作中取得了寶貴的進步。回到家中,她繼續享受火鍋,收穫了成長和充實。

C#使用iKvm黑科技無縫接入JVM生態

https://www.cnblogs.com/deali/p/17744798.html

本文介紹瞭如何在C#中使用Java的NLP工具。作者首先介紹了iKvm,這是一個Java在Microsoft .NET平臺的實現,可以在C#中直接調用Java的jar包或將其轉譯爲.Net平臺的dll。然後,作者詳細介紹瞭如何在項目中添加iKvm和Maven的依賴,並使用iKvm將Java的jar包轉譯爲.Net的dll。最後,作者以HanLP爲例,展示瞭如何在C#中使用Java的NLP工具進行命名實體識別。

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

本文介紹了基於.NET Core開發的支付SDK集:paylink,它可以簡化API調用和通知處理流程,提高工作效率。paylink支持.NET Core 3.1、.NET 6.0、.NET 7.0等運行環境,並且支持支付寶支付和微信支付等渠道。文章還提供了微信公衆號支付的示例代碼,詳細代碼可以在示例項目中查閱。

本計劃在 .NET 8 中推出的 WASI 推遲到 .NET 9

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

.NET 8計劃中的WASI已被推遲到.NET 9。從.NET 8 Preview 4開始,支持生成與WASI兼容的.wasm文件,可以使用WebAssembly運行時Wasmtime CLI運行。WASI的支持最早在Steve Sanderson的個人倉庫開始引入,後來正式引入到dotnet/dotnet-wasi-sdk,現在已經引入到dotnet/runtime的WASI跟蹤問題。.NET 8添加了一個新的“wasi-experimental”工作負載,取代了早期的Wasi.Sdk,這是爲服務器端WebAssembly方案提供.NET本機內置支持的一個步驟。由於WASI預覽版2和3可能會引入重大變化,這對於.NET對WASI的支持非常有意義。

解決因對EFCore執行SQL方法不熟練而引起的問題

https://www.cnblogs.com/azrng/p/17750328.html

本文主要討論了在使用EFCore執行SQL文件時遇到的問題和解決方案。作者在嘗試使用ExecuteSqlAsync方法執行SQL語句時遇到了錯誤,原因是方法接收的參數是FormattableString,而作者在構建這個參數時使用了錯誤的方式。通過查看源碼和進行測試,作者發現問題出在ExecuteSqlAsync方法的入參上,解決方案是先定義一個FormattableString類型直接傳入,或者在SQL語句中直接插入變量。但是,作者提醒讀者注意,ExecuteSqlAsync方法中的SQL在EFCore中並沒有被放入一個事務中,如果有需要,就需要自己創建事務。最後,作者提出了一個未完成的問題,即如何執行SQL文件,提出了使用ADO.NET進行操作的可能解決方案。

文章《Semantic Kernel -- LangChain 的替代品?》的錯誤和疑問 探討

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

本文主要討論了Semantic Kernel(SK),這是微軟推出的一種結合大語言模型(LLM)與傳統編程技術的開源編程框架。SK採用C#開發,因爲微軟的許多產品都是用C#開發的,而且許多商業系統也是用C#或Java這樣的強類型語言構建的。SK不僅支持OpenAI,Azure OpenAI,HuggingFace上的模型,還可以支持任何LLM。SK鼓勵對大模型的支持作爲單獨插件獨立維護,以增強SK的模塊化和可維護性。SK還有一個基於YAML的DSL定義和執行復雜工作流的流業務流程協調程序擴展,提供靈活性,支持通用技能,包括語義函數、原生函數和需要聊天交互的技能。SK使構建企業AI編排器變得容易,是Copilot Stack的中心。

記一次 .NET某賬本軟件 非託管泄露分析

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

本文主要講述了一個.NET程序集泄露導致的CLR私有堆泄露的案例。作者在中秋國慶長假結束後,分享了這個奇奇怪怪的.NET生產事故。通過使用WinDbg分析,作者發現當前的提交內存佔用了2.19G,進程堆佔用1G,差不多佔了一半,但不能說明就是非託管內存泄露。接下來,作者繼續觀察下託管堆,發現當前的託管堆佔用僅195M,這就更好的驗證當前確實存在非託管內存泄露。最後,作者通過觀察CLR私有堆,發現總的大小是1.19G,基本就搞清楚了,然來是程序集泄露。

.Net7自定義GC垃圾回收器

https://www.cnblogs.com/tangyanzhi1111/p/17748346.html

本文介紹瞭如何在.Net7中自定義垃圾回收器(GC)。在.Net7中,CLR和GC已經分離,使得自定義GC變得更容易。首先,下載並將Custom.dll複製到.Net目錄。然後,在C#代碼中,設置環境變量DOTNET_GCName的值爲Custom.dll。運行代碼後,可以看到自定義GC的效果。CLR在初始化時,會檢查是否存在DOTNET_GCName環境變量,如果存在,則使用該環境變量指定的GC替換默認的GC。自定義GC需要新建一個C++ DLL庫項目,引入兩個頭文件,實現三個接口,並導出兩個函數。

ASP.NET 6啓動時自動創建MongoDB索引

https://www.cnblogs.com/edisonchou/p/auto-create-mongoindex-in-aspnet6.html

本文由Edison撰寫,介紹瞭如何在ASP.NET 6應用啓動時通過代碼自動創建MongoDB的索引。索引是一種提高查詢速度和防止髒數據插入的數據結構,支持普通字段、內嵌文檔中的鍵和數組元素進行索引。MongoDB支持多種類型的索引,如唯一索引、稀疏索引、複合索引、TTL索引、全文索引、二維平面索引和地理空間索引。通過Mongo Shell可以進行索引的創建、查詢和刪除。文章還提供了一個Entity的定義示例,並介紹瞭如何使用MongoDbConnection,一個包裹MongoClient的單例對象,來操作MongoDB。

主題

C# 開發工具包 - 現已全面上市 - .NET 博客

https://devblogs.microsoft.com/dotnet/csharp-dev-kit-now-generally-available/

C# 開發工具包現已全面上市。

C# Dev Kit 是 Visual Studio Code 中 C# 開發的擴展。通過將 Visual Studio 中包含的解決方案資源管理器和測試資源管理器等功能引入 Visual Studio Code,它提供了超越現有 C# 開發擴展的功能。它不僅支持在 Windows 上使用,還支持在 Linux 和 macOS 上使用。

使用此擴展需要 Visual Studio 訂閱(包括社區)許可證。

.NET 8 中的 Arm64 性能改進 - .NET 博客

https://devblogs.microsoft.com/dotnet/this-arm64-performance-in-dotnet-8/

.NET 8 中 Arm64 性能改進的說明。

  • 條件選擇
  • 條件比較
  • 條件遞增、否定、反轉
  • VectorTableLookup 和 VectorTableLookupExtension
  • 連續寄存器分配
  • 窺視孔優化
    • 將連續的“ldr”和“str”替換爲“ldp”和“stp”
    • ldp/stp 與 SIMD 寄存器結合使用
    • 將“str wzr”對替換爲“str xzr”
    • 將負載替換爲“mov”
    • mul + neg -> mneg 轉換
  • 提高代碼質量
    • 更快的 Vector128/Vector64 比較
    • 改進的向量 == Vector128<>.Zero
    • 展開記憶移動
  • 提高吞吐量

System.Text.Json 的便利 - .NET 博客

https://devblogs.microsoft.com/dotnet/the-convenience-of-system-text-json/

System.Text.Json 的便利性說明。

本文介紹了使用常用 API(序列化器、讀取器/寫入器)作爲模型(包括 JSON.NET)的性能和用法。

宣佈新版本! | Evergine 9 月 23 日 - Evergine

https://evergine.com/evergine-release-september-2023/

Evergine 2023 年 9 月版已發佈。

此版本包括對 iOS、Metal 和 .NET MAUI 的支持,以及用於變形動畫系統和 XRV 框架的新模塊以及性能改進。

文章、幻燈片等

顯示少量小數 - Qiita

https://qiita.com/hiro_t/items/b83af07c232ce677cae3

格式化 Decimal 字符串時小數部分規範的比較。

內存映射文件和覆蓋結構

https://blog.stephencleary.com/2023/09/memory-mapped-files-overlaid-structs.html

如何將內存映射文件上的數據作爲結構引用。

Microsoft 如何爲殘障開發人員提供支持:慶祝 NDEAM - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/celebating-ndeam-vs-code-visual-studio/

爲了慶祝 NDEAM(全國殘疾人就業意識月),瞭解 Microsoft 對殘疾開發人員的支持。

如何將Godot的C#項目分成多個項目來管理?

https://zenn.dev/numani/articles/godot-split-project

在 Godot 中創建 C# 項目且無法在類庫項目中附加類的問題。

如何使用 gdb 調試 .NET 項目 - Qiita

https://qiita.com/daredeshow/items/aa2b80e4463266ac3cb0

當 .NET 應用程序在 Linux 上因 SEGV 崩潰時,如何使用 gdb 調試 .NET 應用程序。

可以將 .NET 8 Identity API 端點與 IdentityServer 一起使用嗎?

https://andrewlock.net/can-you-use-the-dotnet-8-identity-api-endpoints-with-identityserver/

關於 .NET 8 Identity API 和 IdentityServer 之間的關係和機制,以及關於用 .NET 8 Identity API 端點替換 IdentityServer 模板。

Resharper 2023.2 帶來預測調試器

https://www.infoq.com/news/2023/10/resharper-predictive-debugger/

ReSharper 2023.2 中引入預測調試器

.NET Conf 學生專區回來了!-.NET 博客

https://devblogs.microsoft.com/dotnet/the-dotnet-conf-student-zone-is-back/

關於2023年.NET Conf學生專區的舉辦。

.NET Conf 學生專區是針對初學者/學習者的會議活動。該活動將於11月13日舉行。

JetBrains .NET Day Online '23 的錄音現已推出 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/10/02/recordings-jetbrains-dotnet-day-online-23/

JetBrains .NET Day Online 的錄製現已推出。提供了 10 個與 .NET 相關的會議的錄音。

GitHub Actions Runner 深入探究:註冊和設置

https://dev.to/cwprogram/github-actions-runner-deep-dive-registration-and-setup-1ojb

一篇解釋 GitHub Actions Runner 源代碼的文章。本文介紹瞭如何註冊爲跑步者並開始使用。

瞭解 IAsyncEnumerable - Qiita

https://qiita.com/TsuyoshiUshio@github/items/c4b9929d88d1cd8cabb1

簡要說明如何使用 IAsyncEnumerable 和用例。

前滾到 .NET 的主要版本

https://weblog.west-wind.com/posts/2023/Oct/02/Rolling-Forward-to-Major-Versions-in-NET

如何前滾運行應用程序的運行時版本(例如在 .NET 8 上運行使用 .NET 7 構建的應用程序)。

將 http/2 與 ASP.NET Core 結合使用 - Traefik/Kubernetes/container 示例

https://josef.codes/using-http2-with-asp-net-core-traefik-kubernetes-container-example/

關於在 Kubernetes 上配置 ASP.NET Core 應用程序以偵聽具有 TLS 的 HTTP/2。

.NET 遷移的故事 - 我們的第一視角

https://www.jimmybogard.com/tales-from-the-net-migration-trenches-our-first-views/

.NET Framework 到 .NET 遷移差距系列。遷移視圖等時的捆綁處理

SQL-Server (C#) 的多個結果集,包括 Dapper

https://dev.to/karenpayneoregon/multiple-result-sets-for-sql-server-c-include-dapper-1fpa

如何使用 Dapper 等從 SQL Server 接收多個結果集

C# 提示:通過初始化集合大小來改進內存分配

https://www.code4it.dev/csharptips/initialize-collection-size/

關於List和HashSet通過設置初始大小來分配內存的區別。

糟糕:應用程序隨機崩潰!

https://chnasarre.medium.com/crap-the-application-is-randomly-crashing-b105a6a5a7e8

根據 Datadog 分析器中的示例,瞭解如何使用 WinDbg 調查應用程序崩潰。

網站、文檔等

.NET 多平臺應用程序 UI (.NET MAUI) 文檔:2023 年 9 月的新增功能 - .NET MAUI

https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-docs-maui-mod0

.NET MAUI 2023 年 9 月最新信息文檔。包含來自 Xamarin.Forms 的遷移文檔。

推文

引入一個總結與 Stride(遊戲引擎)相關信息的存儲庫。

https://x.com/strdedotnet/status/1708525831864139906?s=12

image-20231014104653195


使用 .NET MAUI 和 Evergine 合併 3D 圖形的示例應用程序。

https://x.com/jsuarezruiz/status/1708875963260346409?s=12

image-20231014104738538

深入探索

JonDouglas 爲 NuGet 添加贊助商鏈接功能 · Pull Request #12922 · NuGet/Home

https://github.com/NuGet/Home/pull/12922

建議 PR 在 NuGet 包信息中包含贊助商鏈接。

https://x.com/nuget/status/1709955756823314756?s=12

版權聲明

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

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