.NET週刊【3月第3期 2024-03-24】

國內文章

Garnet: 力壓Redis的C#高性能分佈式存儲數據庫

https://www.cnblogs.com/InCerry/p/18083820/garnet_introduce

微軟研究院開源了一個名爲Garnet的C#項目,實現了Redis協議,允許客戶端無需修改直接替換Redis。Garnet基於C# .NET8.0開發,致力於提供極速、可擴展和低延遲的緩存存儲解決方案。它支持在單節點的線程擴展和分片集羣上運行,具備複製、檢查點等數據庫功能,並能利用主內存與分層存儲如SSD。Garnet使用RESP協議與Redis客戶端兼容,性能測試表明其在服務器吞吐量和延遲方面具有顯著優勢。該系統已在微軟內部部署使用,旨在建立一個活躍的社區。

工良出品,從零設計開發 .NET 開發框架:框架源碼和教程電子書

https://www.cnblogs.com/whuanle/p/18086537

該教程由癡者工良編寫,旨在幫助程序員成長,提供了 .NET 開發框架的設計與實現指南。Maomi 框架是其開放源代碼項目,包含模塊化、自動服務註冊等功能。教程內容涵蓋從基礎知識到高級技術,如故障診斷、序列化、事件總線以及 Web 框架定製等。還包括實戰指南如如何利用日誌、HttpClient、動態代碼生成等,並附有實例代碼與單元測試,可供直接學習實踐。作者還提供了其他專題電子書以鞏固相關基礎知識。

.NET Emit 入門教程:第一部分:Emit 介紹

https://www.cnblogs.com/cyq1162/p/18085149

Emit技術是.NET開發中一種重要的動態代碼生成技術,允許開發者使用System.Reflection.Emit命名空間的類在運行時創建或修改程序集、類型與方法,直接操控IL代碼。Emit廣泛應用於ORM框架動態創建實體類、AOP編程動態代理等場景。相比傳統編碼編譯方式,Emit在特定場合下可顯著提升性能和靈活性。本文旨在提供一個Emit的入門教程,幫助開發者理解並掌握這一領域的知識。

【乾貨】Java開發者快速上手.NET指南

https://www.cnblogs.com/Can-daydayup/p/18086254

微軟出了一本面向Java開發者的.NET快速入門電子書,幫助他們瞭解.NET平臺、工具和生態系統。.NET是一個跨平臺的開放源代碼平臺,以C#爲主要開發語言,特點包括全棧生產力、安全代碼模型、多場景代碼支持、本地代碼互操作,跨平臺移植等。.NET適用於客戶端、雲和遊戲應用等多種應用類型。微軟提供詳盡的.NET和C#官方文檔,以及Visual Studio等開發工具。還有DotNetGuide技術社區提供學習資料和交流機會。

C# 優雅的處理TCP數據(心跳,超時,粘包斷包,SSL加密 ,數據處理等)

https://www.cnblogs.com/qwqwQAQ/p/18087456

TCP協議是一種流式數據傳輸協議,它的傳輸過程類似數據通過管道流到對端。Nagle算法通過減少未確認的小數據包數量,能夠減少網絡擁塞和提高傳輸效率,但可能增加延遲。C#中可以通過調整Socket的NoDelay屬性和使用連接超時機制來配置Nagle算法。此外,TCP支持SSL加密傳輸,確保數據安全,C#中通過配置X509Certificate和SslStream來實現服務器和客戶端間SSL認證及加密通信。

http內網穿透CYarp[開源]

https://www.cnblogs.com/kewei/p/18084123

MQTT消息是物聯網設備連接平臺的標準協議,而操作接口常用HTTP協議。若讓設備直提供HTTP接口並通過隧道技術與移動端通信,則可避免繁瑣的協議適配。面對海量連接、身份認證、安全傳輸和開放協議等問題,提出CYarp基於Yarp的HTTP內網穿透中間件。CYarp特性包括:兼容TCP和新版本HTTP協議、集成ASP.NET Core中間件、使用HTTPS保障安全、簡化客戶端需求和明晰協議。用於服務端和客戶端開發的CYarp是比nginx更適用於dotnet平臺的組件,相較於需要運行在桌面系統上的YarpTunnelDemo,CYarp更適合物聯網設備。

在Blazor中使用Chart.js快速創建圖表

https://www.cnblogs.com/Can-daydayup/p/18081886

BlazorChartjs是一個用於Blazor中集成Chart.js圖表的庫,兼容WebAssembly和Blazor Server。它提供了容易使用的組件以便於開發者在Blazor應用程序中實現數據可視化。Blazor是基於.NET和Razor的Web應用程序框架,使得可以用C#編寫Web應用,提高了效率和用戶體驗。文章步驟包括創建Blazor項目、安裝NuGet包PSC.Blazor.Components.Chartjs、添加必要腳本到index.html,引入組件到_Imports.razor文件,並給出了柱狀圖和餅圖的實現示例。

記一次 .NET某遊戲後端API服務 CPU爆高分析

https://www.cnblogs.com/huangxincheng/p/18087576

一位朋友的API服務程序中,CPU使用率滿載後無法降低,請求幫助分析原因。通過使用WinDbg分析工具,首先觀測到CPU佔用率爲60%。經過檢查發現兩個線程的操作停在了HashSet上,進一步分析推斷問題可能是多線程操作HashSet引起的死循環。爲了確認這一點,作者深入瞭解了HashSet的內部結構,最終驗證了這個假設。

爲什麼ASP.NET Core的路由處理器可以使用一個任意類型的Delegate

https://www.cnblogs.com/artech/p/18075406/delgate_as_route_handler

ASP.NET Core中的路由是通過註冊終結點來選擇和處理請求的關鍵過程。終結點由路由模式和請求處理器組成,後者可由任何類型的委託來實現。請求處理器最終轉換爲RequestDelegate類型,用以適配終結點。參數綁定策略與ASP.NET MVC的模型綁定類似,通過特定的特性映射請求數據到方法參數。文章還提到了相關的接口和實現了這些接口的特性,便於數據源的明確來源指定。

.NET Emit 入門教程:第三部分:構建模塊(Module)

https://www.cnblogs.com/cyq1162/p/18086265

本文深入探討了動態程序集中模塊的概念和管理。模塊是組織代碼、實現複用的基本單元。一般情況下,程序集在持久化時只包含一個模塊,但運行時可以包含多個模塊。文章通過問答形式解釋了爲何反編譯dll時只見一個模塊,以及使用Emit技術動態創建模塊的過程。同時指出模塊間可以互動,但定義多個模塊並不建議。最後通過實例代碼說明了在.NET中定義多個模塊並嘗試進行交互的情況。

Garnet發佈 Redis不再是唯一選擇

https://www.cnblogs.com/linshuli/p/18082630

Garnet是微軟研究部開發的遠程緩存存儲系統,支持高吞吐量、低延遲、擴展性和存儲恢復等功能,能與現有Redis客戶端兼容。它基於流行的RESP協議,可通過未修改的Redis客戶端在各類編程語言中使用,如C#的StackExchange.Redis。Garnet特點包括運用.NET技術開發、提供API支持多種操作、高性能的網絡和存儲層設計,支持集羣操作。項目採用MIT許可證發佈,鼓勵開源社區貢獻,並遵循微軟開源行爲準則。更多信息可通過其GitHub頁面獲取。

.NET Emit 入門教程:第二部分:構建動態程序集(追加構建靜態程序集教程)

https://www.cnblogs.com/cyq1162/p/18085811

本文深入探討了如何使用C# Emit創建動態程序集。動態程序集在運行時生成,有助於模塊化、版本控制和代碼複用。文章解釋了程序集的概念,.NET和.NET Core關於動態程序集的支持情況,以及AssemblyBuilder類在創建動態程序集中的應用和在不同.NET版本中的差異。接着,介紹瞭如何在Emit中構建靜態程序集以及通過AssemblyBuilder爲程序集添加自定義屬性和保存的示範。此外,還介紹了靜態程序集的其他構建方式。

.NET開源免費的Windows快速文件搜索和應用程序啓動器

https://www.cnblogs.com/Can-daydayup/p/18084003

大姚分享了一個.NET開源工具Flow Launcher,它是一個免費的Windows快速文件搜索和應用啓動器。這個工具支持多語言拼音搜索,並擁有插件商店,可提高工作效率。用戶可通過快捷鍵進行各種操作,如打開搜索窗口、執行、以管理員身份運行等。還提供了部分功能的截圖,並邀請用戶前往GitHub爲項目點贊。此外,該工具已被收錄在C#/.NET/.NET Core優秀項目中,並且推廣了DotNetGuide技術社區。

[.NET項目實戰] Elsa開源工作流組件應用(二):內核解讀

https://www.cnblogs.com/jevonsflash/p/18084921

本文介紹了Elsa工作流原理,包括變量、內存寄存器、上下文對象、構建和運行過程。Elsa中變量是異步獲取與設置,模擬內存寄存器實現異步模型。文章提供了關鍵類的代碼解析,說明了活動上下文和工作流上下文在執行過程中的作用,並展示瞭如何構建與運行自定義活動。

自定義Key類型的字典無法序列化的N種解決方案

https://www.cnblogs.com/artech/p/18075402/dictionary_key_serialization

使用System.Text.Json.JsonSerializer對自定義類型(如Point結構體)做字典Key進行序列化時會發生異常。文章通過一個簡單例子引入問題,然後探討了通過自定義JsonConverter和TypeConverter來解決這個問題,但都不成功。最後,文章建議了其他幾種解決方案,比如以鍵值對集合進行序列化,轉換成合法的字典形式或自定義讀寫方法。

.NET開源、免費、強大的交互式繪圖庫

https://www.cnblogs.com/Can-daydayup/p/18090505

大姚向大家介紹了一款.NET開源的交互式繪圖庫——ScottPlot,它支持多平臺和框架,可以快捷地在.NET WinForms中實現大型數據集的圖表展示。ScottPlot特點包括支持多種圖表形式,源代碼開放,且提供詳細的使用教程鏈接。項目源碼可在GitHub獲取,同時,ScottPlot也被收錄在C#/.NET/.NET Core優秀項目和框架清單中。此外,文章還提到了DotNetGuide技術社區,它是爲.NET開發者提供資源和交流的開源社區。

Asp-Net-Core開發筆記:實現動態審計日誌功能

https://www.cnblogs.com/deali/p/18086834

本文詳細探討了在ASP.NET Core應用中如何用面向切面編程的方式實現動態審計日誌功能。審計日誌有助於追蹤用戶操作行爲、數據變更記錄等,對系統安全管理至關重要。文章從審計日誌的基礎定義、用途出發,詳細闡述了事件標識到用戶標識等關鍵信息的記錄方式,並提供了AuditLog類的模型定義。同時介紹了IAuditLogService接口的設計,以實現審計日誌的靈活擴展與維護,並展望了後續數據持久化的具體實現。

CYQ.Data 操作 Json 性能測試:對比 Newtonsoft.Json

https://www.cnblogs.com/cyq1162/p/18080172

CYQ.Data自V5.9版本開始大規模優化代碼,目前更新至V5.9.2.7,引入多數據庫支持和分佈式鎖等新功能,同時提升了性能,如通過Emit替換反射以提升效率。版本更新包括新增對FireBird、DaMeng、KingBaseES數據庫的支持,優化數據結構轉化,重構了緩存和JSON相關類,增加了對.net standard2.1的支持,以及多項性能提升和bug修復。

[.NET項目實戰] Elsa開源工作流組件應用(三):實戰演練

https://www.cnblogs.com/jevonsflash/p/18087583

文章進一步闡述了之前介紹的工作流及其在自動化管理領域的廣泛應用,並重點示例了Elsa工作流庫的源碼簡潔易懂,通過審批工作流示例詳細介紹了運用工作流處理審批業務的過程。首先,作者發送文章審批請求後,系統會後臺打印審批人需要操作的鏈接;其次,審批人訪問對應的鏈接以通過或退回文章,系統會記錄審批結果並反饋相關信息。

深入解析C#中的第三方庫NPOI:Excel和Word文件處理的利器

https://www.cnblogs.com/Z1000W/p/18080019

NPOI是一款開源.NET庫,允許開發者在不安裝Microsoft Office的情況下處理Excel和Word文檔。它支持創建、讀取、修改、處理圖表和圖片以及合併單元格等功能,適用於服務器端或無Office環境。通過NuGet安裝後使用,能夠管理工作簿、工作表和單元格等,還能設置單元格樣式並保存文件。NPOI提供了包括批處理、Web應用後臺處理等多種使用場景的解決方案。

[MAUI]集成高德地圖組件至.NET MAUI Blazor項目

https://www.cnblogs.com/jevonsflash/p/18091763

本文介紹了在.NET MAUI Blazor中集成高德地圖JS API的方法,用於實現一個手機App中的地圖選擇器功能。文章首先講解了如何註冊高德開發者賬號並獲取key,接着詳細說明了應用創建、JS API Loader配置和權限配置的步驟,最後概述了創建模型和交互邏輯的過程。本方案的優勢在於藉助.NET MAUI Blazor的跨平臺特性,一次開發即可在多平臺上運行,無需針對每個平臺單獨適配。

使用 LogProperties source generator 豐富日誌

https://www.cnblogs.com/chenyishi/p/18078355

Microsoft.Extensions.Telemetry.Abstractions包中新的日誌記錄source generator能通過[LogProperties]將整體對象作爲State記錄。展示了使用[LoggerMessage]屬性記錄日誌方法,並展示如何通過[LogProperties]自動豐富日誌的方法。還介紹瞭如何使用[LogPropertyIgnore]屬性排除不想記錄的屬性。原理是使用source generator在vs中生成代碼。

StableSwarmUI:功能強大且易於使用的Stable Diffusion WebUI

https://www.cnblogs.com/shanyou/p/18081311

StableSwarmUI 0.6.1-Beta是Stability AI推出的Stable Diffusion WebUI的最新Beta版本,爲AI圖像生成提供一站式解決方案。此UI基於.NET 8開發,支持本地化、可定製化並提供多功能。它有一個易用的界面,使用戶能夠高效與Stable Diffusion交互,支持多GPU以及分佈式生成功能。此版本增加了新功能,如多語言支持、改進圖像編輯器等。它爲非技術用戶提供了自動化安裝過程和易於理解的概念解釋,並支持新模型如SD3。作爲開源項目,在GitHub上持續更新,並計劃進一步增強移動友好性和LLM集成。

Advanced .Net Debugging 5:基本調試任務(線程的操作、代碼審查、CLR內部的命令、診斷命令和崩潰轉儲文件)

https://www.cnblogs.com/PatrickLiu/p/18060906

這篇《Advanced .Net Debugging》系列的第五篇文章主要講解了.NET 程序調試技巧,包括線程操作、代碼審查和診斷命令等。作者介紹了調試環境的搭建、工具下載和具體的調試源碼。本系列文章基於.NET 8版本,而SOSEX擴展內容適用於.NET Framework版本,故本文未進行介紹。文章還提供了包括線程運行和數值求和等示例代碼,說明了這些調試技巧對程序員的重要性。

在winform中如何實現雙向數據綁定?

https://www.cnblogs.com/mingupupu/p/18080974

雙向數據綁定是一項技術,允許模型數據與用戶界面(UI)間自動同步。以winform的DataGridView控件爲例,介紹了雙向數據綁定的實現。首先,創建一個支持數據綁定的BindingList對象,再通過實現INotifyPropertyChanged接口,確保數據變更能夠通知UI更新。最後,通過直接修改BindingList中的數據,演示了UI的自動更新。

記一次 .NET某施工建模軟件 卡死分析

https://www.cnblogs.com/huangxincheng/p/18082543

朋友的窗體程序出現卡死現象,請求幫忙分析。通過WinDbg分析,主線程在執行NtWaitForAlertByThreadId函數時卡住,線程棧顯示主線程正在處理其他線程通過Invoke發送的信息,並嘗試更新窗體樣式。

.Net MinimalApis響應返回值

https://www.cnblogs.com/ruipeng/p/18088161

本文介紹了在MinimalApis中使用自定義IResultModel和系統自帶IResult返回響應值的方法。文章說明了返回字符串時,默認響應類型爲text/plain,返回其他類型時將會自動JSON序列化爲application/json,同時提供了MinimalApis框架JSON序列化的全局配置方法。除此之外,文中還展示了統一響應格式的接口IResultModel以及泛型接口IResultModel的設計,並提供了ResultModel的具體實現,包括成功與失敗響應的處理。

.Net依賴注入神器Scrutor(上)

https://www.cnblogs.com/ruipeng/p/18081965

Scrutor是.Net平臺內置依賴注入框架的擴展,主要提供程序集的批量注入和裝飾器模式兩個功能。本文主要介紹Scrutor的批量注入功能,包括如何使用IServiceCollection的擴展方法Scan和選擇合適的程序集、類型。通過Scanning,可以對程序集中的類型進行篩選、過濾,並基於特定的條件如屬性、命名空間等來批量注入服務。文章詳細解析瞭如何使用Scrutor進行依賴注入的配置和選擇邏輯。

C# 12 攔截器 Interceptors

https://www.cnblogs.com/chenyishi/p/18082725

攔截器Interceptors允許在編譯時聲明式替換應用中的方法,通過在源代碼中指定攔截位置來實現。使用.NET 8創建控制檯應用程序並添加配置,創建InterceptsLocationAttribute屬性,並在特定的類方法上應用此屬性來攔截方法調用。示例演示了攔截AddUser方法,通過添加攔截類和攔截方法,運行時AddUser方法被攔截並未執行,而是執行了攔截器方法。

自己動手做一個批量doc轉換爲docx文件的小工具

https://www.cnblogs.com/mingupupu/p/18085637

本文介紹了批量將doc文件轉換爲docx文件的小工具。doc是微軟Word的舊版文檔格式,docx則是2007及之後版本的格式,基於XML,體積更小,兼容性和穩定性更好。轉換需求基於格式優越性、文件體積減小和兼容性考慮。轉換工具使用C#和Microsoft Office Interop開發,必須在安裝了Word的電腦上運行,具體通過FolderBrowserDialog選擇文件夾,再異步執行DocToDocx方法進行轉換。

.Net依賴注入神器Scrutor(下)

https://www.cnblogs.com/ruipeng/p/18084771

本文主要介紹了 Scrutor 的裝飾器模式功能及其在依賴注入中的應用。首先定義了一個用戶服務類與接口,然後通過裝飾器模式爲 GetAllUsers 接口添加了緩存功能。通過 Scrutor 的 Decorate 方法,我們在 DI 容器中註冊服務並添加裝飾器。文章還提供了裝飾器模式底層實現的核心代碼和測試方法。本文提供的源代碼幫助理解如何在依賴注入中實現裝飾器模式。

在 PostgreSQL 中,解決圖片二進制數據,由於bytea_output參數問題導致顯示不正常的問題。

https://www.cnblogs.com/wuhuacong/p/18088886

PostgreSQL數據庫中,bytea_output參數決定bytea數據類型展示格式,其默認值爲hex,即十六進制格式。如果應用需要二進制格式,應將其改爲escape。對於Winform多數據庫支持系統,在切換到PostgreSQL後可能需調整參數來正確顯示圖片。若bytea_output設置爲hex,須通過C#代碼將hex轉換爲二進制數組讀取,步驟包括查詢圖像數據、轉換字節、創建圖像對象並顯示。核心操作包括修改配置文件、重啓數據庫和轉換數據格式。

基於C#的自動校時器 - 開源研究系列文章

https://www.cnblogs.com/lzhdim/p/18074382

一位開發者在公司的Windows7電腦出現系統時間不準確的問題,因此使用C#開發了一個系統時間自動校時器。該應用提供了界面展示和源代碼下載,使用默認的time.windows.com域名進行校時,其它IP地址的校時還未實現,需要讀者自行擴展。該校時器是作者開發的C#應用之一,感興趣的讀者可以查看作者的其它作品。

.Net Core 使用 TagProvider 與 Enricher 豐富日誌

https://www.cnblogs.com/chenyishi/p/18081945

TagProvider屬性可以在不污染領域模型的情況下,通過定製TagProvider實現豐富日誌的內容,例如僅記錄特定字段。使用Microsoft.Extensions.Telemetry包,可以通過啓用日誌豐富並添加日誌豐富器,將如進程ID、線程ID等信息,或是自定義的應用元數據添加到日誌中。此外,還可以創建個性化的LogEnricher以實現更復雜的日誌記錄需求。

Dll堆棧問題(Dll的靜態變量與全局變量、vs的MT與MD)

https://www.cnblogs.com/renleiguanchashi/p/18087876

文章首先介紹了當DLL中有使用靜態變量的STL類時,如果DLL採用靜態鏈接運行庫,在EXE調用DLL的過程中可能導致崩潰的問題。提出的解決方法包括避免跨執行單元訪問STL類靜態變量、使用WCHAR*代替、或改爲動態鏈接運行庫。然後區分了/MD與/MT、/MDd與/MTd編譯選項的不同,分析了靜態與動態鏈接運行庫的差異及可能導致的問題。微軟官方的文檔解釋了DLL全局變量與靜態變量的行爲。最後通過代碼示例說明了如何在DLL文件中創建共享全局變量,並在主程序中安全訪問這些變量。測試用例展示瞭如何在DLL中導出全局變量和函數。

gRPC入門學習之旅(三)

https://www.cnblogs.com/chillsrc/p/18090824

本文介紹了在gRPC框架中如何創建自定義服務,重點是添加和配置一個處理用戶信息(登錄、獲取和修改信息)的gRPC服務。教程詳細說明了創建UserInfo.proto協議文件、書寫服務定義、運行協議緩衝區文件進而生成C#類文件的過程,以及協議文件的配置方法。

AntSK 0.2.3 版本更新:輕鬆集成 AI 本地離線模型

https://www.cnblogs.com/xuzeyu/p/18091907

AntSK是一個基於.Net 8、Blazor及SemanticKernel開發的人工智能項目,目標是爲開發者提供AI知識庫和智能體平臺。最新版在GitHub上更新,新增了llamafactory集成和將來的模型微調功能。爲簡化工程和降低門檻,項目內置了llamafactory核心文件,避免直接使用python.net,而是自動通過AntSK安裝依賴和啓動llamafactory。其中包括自動化安裝Python環境和依賴包,以及啓動llamafactory並加載指定模型的功能。

webapi通過docker部署到Linux的兩種方式

https://www.cnblogs.com/cyfjjf/p/18081688

本文介紹瞭如何在CentOS系統上安裝、配置和使用Docker,具體包括Docker的安裝、移除,查看狀態及設置開機自啓,同時介紹了webapi項目鏡像的創建、啓動容器,及通過瀏覽器訪問服務的過程。此外,還講述了基於發佈後的webapi文件創建Docker鏡像並運行容器。最後列出了Docker鏡像和容器的常用命令,如創建、啓動、停止、刪除以及修改容器啓動規則等。

abp9 .net8 升級錯誤記錄

https://www.cnblogs.com/moonstars/p/18090546

本文介紹了8個.NET相關技術問題以及修復方法。涉及問題有編譯庫定位、Nuget包更新、Token密鑰位數、SSL認證錯誤、Senparc包升級操作、Pomelo.EntityFrameworkCore.MySql版本兼容、數據庫字段長度超限和.NET 8中服務創建方法改變。

Newtonsoft.Json/Json.NET忽略序列化時的意外錯誤

https://www.cnblogs.com/chenyishi/p/18085582

在.NET中使用Newtonsoft.Json庫,可以在Json序列化與反序列化時處理錯誤,避免因不規則的Json數據而拋出異常。錯誤處理可以通過JsonSerializerSettings上的ErrorEvent或是在類中使用OnErrorAttribute實現,讓用戶可以捕獲和處理錯誤,或允許錯誤冒泡到應用程序。示例展示了ErrorEvent如何在反序列化中捕捉錯誤,並且OnErrorAttribute與其他序列化屬性的工作方式相似,將屬性放在具有正確參數的方法上即可。

除gRPC之外的另一個選擇,IceRPC-支持QUIC

https://www.cnblogs.com/xlgwr/p/18080133

作者自2019年接觸RPC後,對跨平臺、跨語言的RPC特別是gRPC產生了興趣。最近,新的RPC框架IceRPC問世,作者寄予厚望並參與了翻譯README.md。IceRPC是基於QUIC的現代、模塊化RPC框架,可並行處理請求和響應,支持多種協議(包括QUIC和TCP)。它利用了C#和.NET的新功能,提供了易於使用的異步API,並支持取消操作。此外,IceRPC具有高度模塊化和可擴展性,用戶可以自定義攔截器和中間件。它支持使用Slice或Protobuf作爲IDL,並可與DI容器配合使用。

Orleans - 1 .NET生態構建分佈式系統的利器

https://www.cnblogs.com/chenyishi/p/18089561

Orleans 是微軟推出的一個開源分佈式應用框架,基於 Actor 模型,用 Virtual Actor 概念將應用程序分解成多個 Actor 實體。框架通過提供異步消息傳遞等機制,有效避免了鎖和死鎖問題,適用於實時數據處理、在線遊戲、物聯網和分佈式計算等場景。文中通過一個 HelloGrain 示例,說明了如何使用 Orleans 進行分佈式系統的構建和部署。

重新記錄一下ArcGisEngine安裝的過程

https://www.cnblogs.com/kiba/p/18085072

本文介紹了Arcgis 10.1的安裝過程,包括下載帶註冊機的Arcgis版本、註冊機的使用、證書安裝和service.txt文件的創建等。在安裝Arcgis Engine時,需要正確配置許可證服務器的地址並確保服務已啓動,遇到問題可以嘗試使用新的證書安裝包。安裝完成後,爲了使WinForm程序能夠找到Arcgis的組件,需要先安裝Visual Studio 2010來安裝Arcgis Object,作者建議通過下載站點獲取。最後,作者強調安裝後可以在VS 2022中看到Arcgis工具並且建議在創建項目時先用VS 2010創建後再用2022打開。

.Net 8.0 除gRPC之外的另一個選擇,IceRPC之快速開始HelloWorld

https://www.cnblogs.com/xlgwr/p/18084781

本文是一個快速開始使用IceRPC構建C/S應用程序的教程,只需電腦安裝.NET 8 SDK即可。步驟包括安裝dotnet模板、創建服務端和客戶端項目,並運行它們。服務端叫MyServer,客戶端叫MyClient,運行後實現了客戶端向服務器發送greet請求的簡單通信。作者還提供了個人微信以便讀者交流。

.NET分佈式Orleans - 2 - Grain的通信原理與定義

https://www.cnblogs.com/chenyishi/p/18091260

在Orleans框架裏,Grain是核心單元,代表實體或計算單元,存儲在Silo這個獨立進程中。Grain間通信在同一個Silo內通過方法調用,在不同Silo間通過消息傳遞。外部客戶端通過網絡與Silo通信,使用Orleans Messaging Protocol。Orleans默認監聽端口11111和30000用於內部通信和客戶端連接,可自定義端口和IP地址配置。Grain可以通過不同鍵類型識別,如字符串、Guid、整數等。通過IGrainWithStringKey接口,用戶可以創建像買裝備這樣的操作,並將信息保存至內存中。

C#的窗體防閃爍解決方案 - 開源研究系列文章

https://www.cnblogs.com/lzhdim/p/18077345

文章討論了C#中無邊框窗體在調整大小時出現的閃爍問題,並提供了一個簡單有效的解決方案。文章說明了項目目錄和源代碼,沒有提供界面截圖,但指出可以根據窗體的提示使用。還提供了源碼下載鏈接,並指向作者的其他相關博文。

C#的播放資源文件裏的音頻例子 - 開源研究系列文章

https://www.cnblogs.com/lzhdim/p/18077721

本博文介紹瞭如何在C#開發的待辦列表TodoList中添加聲音提醒功能,通過複用文章提供的模塊代碼,即可實現播放資源文件中的wav音頻文件。文章還包含了詳細的操作指南和源碼下載鏈接,便於讀者理解和使用。

Csharp學習Linq

https://www.cnblogs.com/wenlong-4613615/p/18073134

本文首先通過學生類的代碼示例介紹了LINQ(語言集成查詢)的基本使用。然後,通過創建一個學生列表並展示如何使用LINQ的Where方法來過濾具有特定屬性的學生對象——例如,獲取ClassId爲3的學生,篩選年齡大於24的學生,以及找到年紀小於23且ClassId爲2的學生。

主題

microsoft/garnet:Garnet 是 Microsoft Research 的遠程緩存存儲,提供強大的性能(吞吐量和延遲)、可擴展性、存儲、恢復、集羣分片、密鑰遷移和複製功能。 Garnet 可以與現有的 Redis 客戶端配合使用。

https://github.com/microsoft/garnet

版本 2.3.6 · mysql-net/MySqlConnector

https://github.com/mysql-net/MySqlConnector/releases/tag/2.3.6

向 .NET iOS 和 .NET MAUI 應用程序添加 Apple 隱私清單支持 - .NET 博客

https://devblogs.microsoft.com/dotnet/apple-privacy-manifest-support/

.NET 智能組件簡介 - AI 支持的 UI 控件 - .NET 博客

https://devblogs.microsoft.com/dotnet/introducing-dotnet-smart-components/

宣佈在 Visual Studio 17.10 預覽版 2 中推出適用於 ARM64 架構的 SQL Server 數據工具 (SSDT) - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/arm64-in-ssdt/

公告:Swashbuckle.AspNetCore 在 .NET 9 中被刪除 · 問題 #54599 · dotnet/aspnetcore

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

Rider 中 Xamarin 支持的更新 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/03/15/an-update-on-xamarin-support-in-rider/

文章、幻燈片等

集合表達式 – 在 Rider 和 ReSharper 中使用 C# 12 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/03/26/collection-expressions-using-csharp-12-in-rider-and-resharper/

在 .NET 9 中使用 PriorityQueue 實現 Dijkstra 算法查找兩個節點之間的最短路徑

https://andrewlock.net/implementing-dijkstras-algorithm-for-finding-the-shortest-path- Between-two-nodes-using-priorityqueue-in-dotnet-9/

.NET Aspire 儀表板是在本地開發期間可視化 OpenTelemetry 數據的最佳工具

https://dev.to/asimmon/net-aspire-dashboard-is-the-best-tool-to-visualize-your-opentelemetry-data-during-local-development-9dl

使用最新預覽查看您的拉取請求評論 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/see-your-pull-request-comments-with-the-latest-preview/

如何將NuGet庫添加到WiXSharp自定義操作中-Qiita

https://qiita.com/spc_ksudoh/items/299b6ba7eab25e7ad0f5

ASP.NET 應用程序中的源代碼泄露

https://swarm.ptsecurity.com/source-code-disclosure-in-asp-net-apps/

通過 Sentry 和 OpenTelemetry 獲得生產中的 Aspire 見解

https://blog.sentry.io/aspire-insights-in-product-with-sentry/

WebBrowser和WebView2 PDF文件顯示

https://zenn.dev/nasrisilva/articles/4925cd69967725

在Visual Studio中調試實驗室派

https://zenn.dev/kotaproj/articles/pi_dotnet_hello

C# rekodo型和JSON:數據結構的自由度和一致性

https://zenn.dev/jtechjapan_pub/articles/ccdb92e7d660b1

.NET8.0中API在JWT的驗證中失敗的情況下,試着改變結構以使用JsonWebToken-Qiita

https://qiita.com/karuakun/items/0736cfb273abbc2aee2e

Sirenix 的 Odin Inspector 支持來到 Rider(一款 JetBrains IDE) | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/03/20/sirenix-s-odin-inspector-support-comes-to-rider-a-jetbrains-ide/

C# 在指定線程上運行異步方法 - Qiita

https://qiita.com/qiitatosh/items/45e2a3dc7ba9694dcc92

我們最喜歡的 JetBrains Rider 快捷鍵(不是 Alt+Enter 或 Shift+Shift) | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/03/20/our-favorite-jetbrains-rider-shortcuts-that-arent-altenter-or-shiftshift/

[C#] 如何讓 GitHub Copilot 在 Visual Studio 中識別多個文件和代碼 - Qiita

https://qiita.com/yuu-dev/items/9e0d22191e4655342d88

WiXSharp 也是創建 Windows 安裝程序的一個選項(但僅適用於那些可以使用 WiX 工具集的人)- Qiita

https://qiita.com/spc_ksudoh/items/afab902b6dea7fd4f6ed

[C#] 使用 GitHub Copilot 生成 XML 文檔的步驟 - Qiita

https://qiita.com/yuu-dev/items/b58fb4b041b2c2e5f538

使用 Audit.Net 進行實體框架核心審計試驗

https://dev.to/hirushafernando/entity-framework-core-audit-trial-with-auditnet-3o8l

使用 .NET Aspire 運行 Ruby on Rails Web 應用程序

https://dev.to/asimmon/running-ruby-on-rails-web-apps-with-net-aspire-1pee

.NET 開發者乞求破壞生態系統

https://aaronstannard.com/dotnet-eventing-backslide/

Blazor 的 CSS 隔離::深層問題和解決方案

https://khalidabuhakmeh.com/blazors-css-isolation-deep-issue-and-solution

瞭解 System.Diagnostics DiagnosticSource 和 DiagnosticListener(第 1 部分)- Steve Gordon - 與 Steve 一起編碼

https://www.stevejgordon.co.uk/understanding-system-diagnostics-diagnosticsource-and-diagnosticlistener-part-1

在 .NET 8 中輕鬆向 Blazor 添加“Ore Ore”登錄功能

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

Flux 模式和.NET 等中的實現。

https://zenn.dev/gab_km/articles/f2dcf0f17c8c94

關於 SpanT GC 保護

https://zenn.dev/ongaeshi/articles/0d271a6e42cf41

通過在 C# 中組合兩個具有透明背景的圖像來生成單個圖像 - 使用 OpenCVSharp、ImageSharp 和 SkiaSharp 的示例 | @jsakamoto

https://devadjust.exblog.jp/30007598/

C# 12 新功能介紹 - 類型別名、內聯數組等期待已久的新功能有哪些?

https://codezine.jp/article/detail/19164

在簡單的 C# 應用程序中找出神祕的 MissingMethodException

https://sergeyteplyakov.github.io/Blog/csharp/2024/03/21/Mythical_MissingMethodException.html

【C#】StringBuilder 和 DefaultInterpolatedStringHandler 的處理速度和內存量比較 - Hanachiru 的我的筆記

https://www.hanachiru-blog.com/entry/2024/03/22/120000

[C#] Span和Memory - Annulus Games

https://annulusgames.com/blog/span-and-memory/

擴展

https://ufcpp.net/blog/2024/3/extensions/

GDC 2024 上的 Visual Studio 和 GitHub Copilot - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/visual-studio-and-github-copilot-at-gdc-2024/

neue cc - 通過在 Redis 兼容的超高速內存數據存儲“Garnet”上實現 C# CustomCommand 來擴展命令

https://neue.cc/2024/03/19_Garnet.html

neue cc - Claudia - Anthropic 如何使用 Claude 的 C# SDK 和現代 C# 創建 Web API 客戶端

https://neue.cc/2024/03/18_Claudia.html

C# 13 中的集合表達式 - 字典表達式

https://ufcpp.net/blog/2024/3/dictionary-expressions/

在數據庫調優中實際產生效果的三個措施

https://zenn.dev/nekojoker/articles/1c97263ebd23d1

豐田將移動應用程序遷移到 Uno 平臺

https://platform.uno/blog/toyota-migrates-mobile-app-to-uno-platform/

庫、存儲庫、工具等。

GitHub - mayuki/Yafp: 一個基於 ASP.NET Core 和 YARP 實現轉發代理的工具包。

https://github.com/mayuki/Yafp

網站、文檔等

推文

https://x.com/mkristensen/status/1770874082466377969?s=12

image-20240327203708754

版權聲明

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

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