.NET週刊【7月第3期 2023-07-16】

國內文章

揭祕 .NET 中的 TimerQueue(上)

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

TimerQueue 是.NET中實現定時任務的核心組件,它是一個定時任務的管理器,負責存儲和調度定時任務。它被用於實現很多 .NET 中的定時任務,比如 System.Threading.Timer、Task.Delay、CancellationTokenSource 等。

筆者將用兩篇文章爲大家介紹 TimerQueue 的實現原理,本篇文章將以 System.Threading.Timer 爲入口,揭祕 TimerQueue 對定時任務基本單元 TimerQueueTimer的管理和調度,下一篇文章將介紹 TimerQueue 又是如何通過 native timer 被觸發的。

如何使用C#中的Lambda表達式操作Redis Hash結構,簡化緩存中對象屬性的讀寫操作

https://www.cnblogs.com/anech/p/17556457.html

Redis是一個開源的、高性能的、基於內存的鍵值數據庫,它支持多種數據結構,如字符串、列表、集合、散列、有序集合等。其中,Redis的散列(Hash)結構是一個常用的結構,今天跟大家分享一個我的日常操作,如何使用Redis的散列(Hash)結構來緩存和查詢對象的屬性值,以及如何用Lambda表達式樹來簡化這個過程。

Thread 和 ThreadPool 簡單梳理(C#)【併發編程系列】

https://www.cnblogs.com/czzj/p/ThreadPool.html

對於 Thread 和 ThreadPool 已經是元老級別的類了。Thread 是 C# 語言對線程對象的封裝,它從 .NET 1.0 版本就有了,然後 ThreadPool 是 .Net Framework 2.0 版本中出現的,都是相當成熟的存在。
當然,現在已經出現了 Task 和 PLinq 等更高效率的併發類,線程和線程池在實際開發中逐漸減少了,但是不能不知道他們的用法,因爲總有需要對接的內容,別人用了你也得能看懂。
本文將結合示例,簡單介紹下 Thread 和 ThreadPool。

Blazor資源大全,很棒的Blazor

https://www.cnblogs.com/hejiale010426/p/17553901.html

一個收集了很棒的Blazor資源的集合。

Blazor是一個使用C#/Razor和HTML在瀏覽器中運行的.NET Web框架。

歡迎貢獻!請先查看貢獻指南。感謝所有的貢獻者,你們真棒,沒有你們就不可能實現這個!

如果你需要在這個列表中搜索,你可以嘗試這個很棒的網站:Awesome Blazor Browser。感謝@jsakamoto提供這個!源代碼

以純二進制的形式在內存中繪製一個對象

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

一個對象總是映射一塊連續的內存序列(不考慮對象之間的引用關係),如果我們知道了引用類型實例的內存佈局,以及變量引用指向的確切的地址,我們不僅可以採用純“二進制”的方式在內存“繪製”一個指定引用類型的實例,還能直接通過改變二進制內容來更新實例的狀態。

WinUI(WASDK)使用MediaPipe檢查人體姿態關鍵點

https://www.cnblogs.com/GreenShade/p/17552324.html

之前有用這個MediaPipe.NET .NET包裝庫搞了手勢識別,豐富了稚暉君的ElectronBot機器人的第三方上位機軟件的功能,MediaPipe作爲谷歌開源的機器視覺庫,功能很豐富了,於是就開始整活了,來體驗了一把人體姿態關鍵點檢測。

記一次 .NET 某遊戲服務後端 內存暴漲分析

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

前幾天有位朋友找到我,說他們公司的後端服務內存暴漲,而且CPU的一個核也被打滿,讓我幫忙看下怎麼回事,一般來說內存暴漲的問題都比較好解決,就讓朋友抓一個 dump 丟過來,接下來我們用 WinDbg 一探究竟。

調用內部或私有方法的N種方法

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

非公開的類型或者方法被“隱藏”在程序集內部,本就不希望從外部訪問,但是有時候調用一個內部或者私有方法可能是唯一的“救命稻草”,這篇文章列出了幾種具體的實現方式。以如下這個Foobar類型爲例,它具有一個內部屬性InternalValue,我們來看看有多少種方式可以從外部獲取一個Foobar對象的InternalValue屬性值。

public class Foobar
{
    internal int InternalValue => 123;
}

使用C#編寫.NET分析器(完結)

https://www.cnblogs.com/InCerry/p/writing-a-net-profiler-in-c-sharp-part-4.html

這是在Datadog公司任職的Kevin Gosse大佬使用C#編寫.NET分析器的系列文章之一,在國內只有很少很少的人瞭解和研究.NET分析器,它常被用於APM(應用性能診斷)、IDE、診斷工具中,比如Datadog的APM,Visual Studio的分析器以及Rider和Reshaper等等。之前只能使用C++編寫,自從.NET NativeAOT發佈以後,使用C#編寫變爲可能。

筆者最近也在嘗試開發一個運行時方法注入的工具,歡迎熟悉MSIL 、PE Metadata 佈局、CLR 源碼、CLR Profiler API的大佬,或者對這個感興趣的朋友留聯繫方式或者在公衆號留言,一起交流學習。

零基礎如何自學C#?

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

本文來源於知乎的一個提問,提問的是一個大一軟件工程專業的學生,他想要自學C#但是不知道該怎麼去學,這讓他感到很迷茫,希望有人能給他一些建議和提供一些學習方向。

.NET 8 Preview 6發佈,支持新的了Blazor呈現方案 和 VS Code .NET MAUI 擴展

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

2023年7月11日 .NET 8 Preview 6,.NET 團隊在官方博客發佈了系列文章:

這個版本是倒數第二個預覽版,其中包含大量庫更新、新的 WASM 模式、更多source generators、持續的性能改進以及 iOS 上的 NativeAOT 支持等。

爲什麼應該儘可能避免在靜態構造函數中初始化靜態字段?

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

C#具有一個默認開啓的代碼分析規則:[CA1810]Initialize reference type static fields inline,推薦我們以內聯的方式初始化靜態字段,而不是將初始化放在靜態構造函數中。

C/C++包裝器SWIG使用指南

SWIG包裝器使用指南——(一)基本概念
SWIG包裝器使用指南——(二)C++代碼的包裝
SWIG包裝器使用指南——(三)Typemap 類型映射
SWIG包裝器使用指南——(四)C#使用SWIG簡介與實踐

SWIG (Simplified Wrapper and Interface Generator)是一個exe小工具,主要用來包裝已有的 C/C++ 代碼並生成目標語言(C#、Java、Lua、Python等)代碼。可以極大簡化目標語言到C/C++的調用。上述文章對SWIG的使用做了基本介紹並結合C#調用到C++時的一些常見問題做了舉例說明。

主題

宣佈 .NET 8 預覽版 6 - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-6/

.NET 8 預覽版 6 已發佈。

  • 改進的System.Text.Json
    • JsonStringEnumConverter<TEnum>
    • JsonConverter.Type
  • 基於流的 ZipFile.CreateFromDirectory 和 ExtractToDirectory 方法重載
  • MetricCollector 指標 API
  • 選項驗證源生成器
  • 擴展 LoggerMessageAttribute 構造函數重載以增強功能
  • 改進的配置綁定源生成器
  • COM 與源生成器的互操作性
  • HTTPS代理支持
  • 系統安全:SHA-3 支持
  • SDK:容器發佈性能和兼容性
  • WASM 中的混合全球化模式
  • 支持針對 iOS 平臺的 NativeAOT
  • 代碼生成器
    • 改進的JIT
    • AVX-512 支持
    • 改進的 Arm64

在 .NET 8 預覽版 6 中宣佈 .NET MAUI:Hello VS Code 和 VS for Mac - .NET 博客

https://devblogs.microsoft.com/dotnet/announcing-dotnet-maui-in-dotnet-8-preview-6/

.NET 8 Preview 6 中對 .NET MAUI 的更新。

除了 Visual Studio Preview 之外,此版本還包含 Visual Studio Code 的擴展作爲預覽版。它還可作爲 Visual Studio for Mac 中的預覽功能使用。

宣佈推出 Visual Studio Code 的 .NET MAUI 擴展 - Visual Studio 博客

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

Visual Studio Code 的 .NET MAUI 擴展預覽版。

此擴展提供 Windows、macOS 和 Linux 上的 .NET MAUI 開發,並支持在任何目標(例如不同的設備或模擬器)上進行開發和調試。許可證是 Visual Studio 許可證,就像 C# Dev Kit 一樣。

.NET 8 Preview 6 中的 ASP.NET Core 更新 - .NET 博客

https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-6/

.NET 8 Preview 6 中 ASP.NET Core 的更新。

  • 改進啓動調試體驗
  • Blazor
    • 服務器端渲染表單模型綁定和驗證
      • 增強的頁面導航和表單處理
      • 在流式渲染中保留現有的 DOM 元素
      • 在調用者中指定組件渲染模式
      • Blazor WebAssembly 交互式渲染
      • 部分改進
      • 將查詢字符串級聯到 Blazor 組件
      • 用於服務器交互的 Blazor Web App 模板選項
      • Blazor 模板集成指標
      • ASP.NET Core 應用程序的測試指標
    • 新的、改進的和重命名的計數器
  • API 編寫
    • 最小 API 中的複雜表單綁定支持
  • 服務器和中間件
    • HTTP.sys 內核響應緩衝
    • 基於Redis的輸出緩存

新的 C# 12 預覽功能 - .NET 博客

https://devblogs.microsoft.com/dotnet/new-csharp-12-preview-features/

引入新的 C# 12 預覽功能。

  • 通過“nameof”訪問接口成員
  • 內聯數組
  • 攔截器
    • 干預源生成器現有方法調用的機制
    • 作爲實驗性功能實現,需要自己的開關啓用

.NET 2023 年 7 月更新 – .NET 7.0.9、.NET 6.0.20 - .NET 博客

https://devblogs.microsoft.com/dotnet/july-2023-updates/

.NET 7.0.9 和 6.0.20 發佈。

此版本包含多項安全修復和改進。

  • CVE-2023-33127 – .NET 遠程代碼執行漏洞
    • .NET 診斷服務器中的權限提升和代碼執行
  • CVE-2023-33170 – .NET 安全功能繞過漏洞
    • 帳戶鎖定最大嘗試次數未在 ASP.NET Core 中更新

.NET Framework 2023 年 7 月安全和質量彙總更新 - .NET 博客

https://devblogs.microsoft.com/dotnet/dotnet-framework-july-2023-security-and-quality-rollup-updates/.NET Framework 2023 年 7 月累積安全和質量更新已發佈。

引入帶有新 API 和場景的 System.Web Adaptor v1.2 - .NET 博客

https://devblogs.microsoft.com/dotnet/systemweb-adapters-1_2/

System.Web Adaptor v1.2 已發佈。

此版本添加了對 IHttpModule 的支持和模擬,包括 ASP.NET Core 中的 HttpApplication、自定義會話密鑰序列化程序、IHtmlString 支持和其他 API。

本文還提供了增量遷移的指導。

ReSharper 和 Rider 2023.2 EAP 9 中的擴展 C# 支持 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/07/14/rsrp-rider-2023-2-eap9/

ReSharper 和 Rider 2023 EAP 9 發佈。

此版本帶來了一些改進,例如對主構造函數的更好的 C# 12 預覽支持、IAsyncDisposable 支持以及更好的丟棄“_”支持。

通過 Microsoft Dev Box 充分利用 Visual Studio - 現已全面上市 - Visual Studio 博客

https://devblogs.microsoft.com/visualstudio/get-the-most-from-visual-studio-with-microsoft-dev-box-now-generally-available/

Microsoft Dev Box 現已全面上市。

文章、幻燈片等

ReSharper 2023.2 EAP 8:比較 ReSharper 和 dotPeek 中的程序集,以及更多 C++ 功能 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/07/10/resharper-2023-2-eap-8/

引入 ReSharper 2023.2 EAP 8 中的新功能。

添加了在 ReSharper 和 dotPeek 中查看程序集比較差異的功能。

集成測試 Postgres 與 testcontainers-dotnet

https://dev.to/kashifsoofi/integration-test-postgres-with-testcontainers-dotnet-1gkn

如何使用 testcontainers-dotnet 與 PostgreSQL 進行集成測試。

Silverlight 不會消亡:“XAML for Blazor”到來 -- Visual Studio 雜誌

https://visualstudiomagazine.com/articles/2023/07/13/xaml-blazor.aspx

Blazor 的 XAML 簡介,它允許您從 Userware 將 XAML 與 Blazor 結合使用。

如何防止屏幕在 Blazor 中運行一段時間後關閉

https://dev.to/this-is-learning/how-to-prevent-the-screen-turn-off-after-a-while-in-blazor-4b29

如何使用 Blazor 中的屏幕喚醒鎖定 API 防止屏幕休眠。

最小的 .NET Hello World 二進制文件有多小?

https://blog.washi.dev/posts/tinysharp/

嘗試使顯示 Hello World 的 .NET 應用程序儘可能小。

本文使用各種技術將 4.6KB 的可執行文件縮小到 834 字節。

最小 API AOT 編譯模板:探索 .NET 8 預覽 - 第 2 部分

https://andrewlock.net/exploring-the-dotnet-8-preview-the-minimal-api-aot-template/

.NET 8 預覽版中最小 API 的 AOT 模板說明。

我終於在 .NET 中找到了登錄的用途!

https://martinjt.me/2023/07/14/i-finally-found-a-use-for-logging-in-net/

在錯誤配置對 OpenTelemetry 的跟蹤時獲取錯誤日誌的技術。

由於導出器在後臺運行,即使發生錯誤,也不會出現在表中,因此事件由EventListener獲取。

在題爲“如何優化 .NET + Lambda 性能”的視頻會議中發表講話 #devio2023 | DevelopersIO

https://dev.classmethod.jp/articles/devio2023-video-57-dotnet/

將 .NET 與 AWS Lambda 結合使用時,使用 NativeAOT 提高冷啓動性能。

探索 .NET 8 中的 Blazor 更改 - 服務器端渲染 (SSR)

https://jonhilton.net/blazor-ssr/

.NET 8 中 Blazor 的服務器端渲染簡介

Azure AD 重命名爲 Microsoft Entra ID 對於 .NET 開發人員意味着什麼? - .NET 博客

https://devblogs.microsoft.com/dotnet/azure-ad-microsoft-entra/

Azure Active Directory (Azure AD) 品牌重塑爲 Entra Identity 對 .NET 開發人員有何影響。

對現有代碼不會產生影響,因爲庫和 URL 不會更改。

在 JetBrains Rider 中調試源生成器 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/07/13/debug-source-generators-in-jetbrains-rider/

Rider 中的源生成器調試簡介。

本文涵蓋了調試 Source Generator 生成的代碼、調試 Source Generator 本身以及 Roslyn 模板。

標題欄和主題:WinUI 冒險

https://inthehand.com/2023/07/11/titlebars-and-themes-a-winui-adventure/

有關調整 WinUI 標題欄中的窗口按鈕和任務欄預覽中的圖標以匹配 Windows 外觀的提示。

如何在 C# 單元測試中的測試輸出中顯示 ILogger 日誌

https://zenn.dev/jtechjapan/articles/d10e9e9c0d5bbe

如何在單元測試中通過Microsoft.Extensions.Logging的ILogger進行測試輸出。

本文展示瞭如何使用 MartinCostello.Logging.XUnit 包。

dotTrace 加入 BenchmarkDotNet | .NET 工具博客

https://blog.jetbrains.com/dotnet/2023/07/11/dottrace-comes-to-benchmarkdotnet/

關於 BenchmarkDotNet 0.13.6 中引入的 dotTrace 集成。

DotTraceDiagnoser 允許在基準測試期間進行分析。打開快照需要 dotTrace 許可證。

將 WebApplication.CreateBuilder() 與新的 CreateSlimBuilder() 方法進行比較:探索 .NET 8 預覽 - 第 3 部分

https://andrewlock.net/exploring-the-dotnet-8-preview-comparing-createbuilder-to-the-new-createslimbuilder-method/

關於 .NET 8 中 ASP.NET Core 中引入的“WebApplication.CreateSlimBuilder”。

它詳細介紹了使用 AOT 受限配置啓動的構建器。

里程碑:VideoLAN .NET NuGet 包下載量達到 200 萬次

https://dev.to/mfkl/milestone-2-million-downloads-for-videolan-net-nuget-packages-k1e

VideoLAN .NET NuGet包賬戶總下載量突破200萬次下載及未來發展。

它涉及 LibVLC 4 支持、Unity、Uno 平臺和商業許可證。

Windows、Visual Studio 和 .NET 的支持狀態 (2023.07) - Qiita

https://qiita.com/mmake/items/946aea0d9a195aa5e3d4

Windows 和 Visual Studio、.NET 和 .NET Framework 支持日期以及支持的操作系統組合的摘要。

Cake v3.1.0 發佈

https://cakebuildnet.medium.com/cake-v3-1-0-released-c42728359d25

Cake v3.1.0 已發佈。

此版本包含多項改進。

嘗試了 Dev Drive,在 Build 2023 上宣佈並在 Windows 11 Insider Preview 中提供 - Shibayan 其他

https://blog.shibayan.jp/entry/20230710/1688920344

關於嘗試在 Windows 11 Insider Preview 中提供的開發卷 Dev Drive。

它還涉及使用 .NET 實際構建的結果以及如何利用寫入時複製。

讓我們學習 .NET - Web 開發(日語)- YouTube

https://www.youtube.com/watch?v=YbYwWaJsbwM

用於學習使用 Visual Studio Code 通過 HTML/CSS、ASP.NET Core Razor Pages 等進行 .NET 開發的視頻。

https://twitter.com/aspnet/status/1678569803554930689?s=12

庫、存儲庫、工具等。

MSBuild 編輯器 - Visual Studio Marketplace

https://marketplace.visualstudio.com/items?itemName=mhutch.MSBuildEditor

用於在 Visual Studio 中編輯 MSBuild 文件的擴展。

https://twitter.com/mjhutchinson/status/1679272936195194885?s=12## 網站、文檔等

推文

https://twitter.com/davidfowl/status/1679223885256957952?s=12

image-20230718205652398


https://twitter.com/ufcpp/status/1679133008882704384?s=12

image-20230718205726866


image-20230718205804202

https://twitter.com/davidfowl/status/1678738294933159937?s=12&t=ggvrrZ7oLogHyNoIGNgjbw

版權聲明

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

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