.NET週刊【7月第4期 2023-07-23】

2023-07-26 12:00:44

國內文章

你知道.NET的字串在記憶體中是如何儲存的嗎?

https://www.cnblogs.com/artech/p/string-memory-layout.html

毫無疑問,字串是我們使用頻率最高的型別。但是如果我問大家一個問題:「一個字串物件在記憶體中如何表示的?」,我相信絕大部分人回答不上來。我們今天就來討論這個問題。

使用 C# 進行AI工程開發-基礎篇(四):dotnet script 與 Polyglot

https://zhuanlan.zhihu.com/p/645258959

本篇介紹兩個工具,有了它們,csharp 可以獲得類似 python 的使用體驗。這兩個工具,一個是指令碼工具 dotnet script,另一個是筆記工具 polyglot,vscode 對它們的支援都非常好。

Int64針對32位元架構是按照4位元組還是8位元組對齊?

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

作為構建.NET的標準,CLI Spec(ECMA-335)針對基元型別的對齊規則具有如下的描述。按照這個標準,我們是這麼理解的:8位元組的資料型別(int64、unsigned int64和float64)根據採用的機器指令架構選擇4位元組或者8位元組對其。進一步來說,它們在x86/x64機器上的對其位元組分別為4位元組和8位元組。

關於 async 和 await 兩個關鍵字(C#)【並行程式設計系列】

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

對於 async 和 await 兩個關鍵字,對於一線開發人員再熟悉不過了,到處都是它們的身影。

從 C# 5.0 時代引入 async 和 await 關鍵字,我們使用 async 修飾符可將方法、lambda 表示式或匿名方法指定為非同步。 如果對方法或表示式使用此修飾符,則其稱為非同步方法。async 和 await 通過與 .NET Framework 4.0 時引入的任務並行庫(TPL:Task Parallel Library)構成了新的非同步程式設計模型,即 TAP(基於任務的非同步模式 Task-based asynchronous pattern)。

但是如果對他們不太瞭解的話,會有很多麻煩出現,所以最近查了一些資料,也看了幾個大佬的介紹,今天來記錄彙總下。

PerfView專題 (第十五篇): 如何洞察 C# 中的慢速方法

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

在 dump 分析旅程中,經常會遇到很多朋友反饋一類問題,比如:

  • 方法平時都執行的特別快,但有時候會特別慢,怎麼排查?
  • 我的方法第一次執行特別慢,能看到慢在哪裡嗎?

相信有朋友肯定說,加些紀錄檔不就好了,大方向肯定是沒問題的,但加紀錄檔的顆粒度會比較粗而且侵入性也比較大,比如說這個方法不是你的,或者說這個方法是作業系統的,一般情況下對他們無法干涉,那如何洞察在你作用域之外的方法效能呢?作為 CLR團隊首推的 PerfView 效能分析工具,必須要 KO 這些問題,接下來我們就簡單聊一聊。

PerfView專題 (第十四篇): 洞察那些 C# 程式碼中的短命執行緒

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

這篇文章源自於分析一些疑難dump的思考而產生的靈感,在dump分析中經常要尋找的一個答案就是如何找到死亡執行緒的生前都做了一些什麼?

用 perfcollect 洞察 Linux 上.NET程式 CPU爆高

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

如果要分析 Linux上的 .NET程式 CPU 爆高,按以往的個性我肯定是抓個 dump 下來做事後分析,這種分析模式雖然不重但也不輕,還需要一定的底層知識,那有沒有傻瓜式的 CPU 爆高分析方式呢?

理解ASP.NET Core - 限流(Rate Limiting)

https://www.cnblogs.com/xiaoxiaotank/p/17560251.html

在微服務化的架構設計中,閘道器扮演著重要的看門人角色,它所提供的功能之一就是限流。而對於眾多非微服務化的系統來說,可能並不會部署閘道器(無論是因為成本還是複雜度),在這種場景下,為了實現限流,微軟在 .NET 7 中提供了官方的限流中介軟體。下面我們一起來看一下。

PerfView專題 (第十三篇):洞察 .NET程式 的非託管控制程式碼洩露

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

前幾天寫了一篇 如何洞察 .NET程式 非託管控制程式碼洩露 的文章,文中使用 WinDbg 的 !htrace 命令實現了控制程式碼洩露的洞察,在文末我也說了,WinDbg 是以侵入式的方式解決了這個問題,在生產環境中大多數情況下是不能走附加程序的模式,所以這也是它最大的侷限性。

那如何以非侵入的方式解決這個問題呢?這就是本篇討論的重點,對,就是用 CLR 團隊 鼎力推薦的 Perfview 來解決這個問題,哈哈,是我昨天看檔案無意發現的