[Migrate .NET] 在 Named Pipe 連線時發現 Timeout 行為的變化

當前手上接觸到的一個系統專案,其整體的程式架構概念可以簡化成:

HW/FW ←→ CLI ←→ GUI

HW/FW 的程式,大多是透由 C/C++ 撰寫,這部分有專業的人員處理開發;而系統中的 CLI 與 GUI 這兩部分的程式,是仰賴 .NET 來進行開發的。

也因此隨著 .NET 的跨平台發展,便得以讓這兩部分的程式,除了既保留在 Windows 上的順利運作,也能逐步有序地從轉移至 Linux 當中運作。

 

也就是 .NET 一直強調的: 

Write once, run multi-platform.

(原文為 Write once, run everywhere. 在此做些文字改動)

...繼續閱讀 »

.NET 跨應用程式通訊處理: Named Pipe

在電腦的 Process 與 Process 之間要相互通訊(IPC, Inter-Process Communication),粗略的來分可以有兩種方式:

  • Socket
  • Pipe

以下列出對照:

 PipeSocket
IPC
跨電腦✔ (需在 Windows 透過 SMB 服務)
效能⭐⭐⭐
跨網路通訊
使用難易
...繼續閱讀 »

.NET 的 Process 類別中設計有關 Memory 的屬性運用來監測應用程式的記憶體用量

透過 .NET API 的 Process 所提供記憶體資訊的屬性運用,可以自我監測 .NET 應用程式佔據記憶體的狀況。

以下列舉三個屬性來介紹:

屬性意義
PagedMemorySize64可被分頁到磁碟的記憶體數字
PrivateMemorySize64程式跟系統請求使用的專用記憶體數字(不會跟其他行程共用的部分)
WorkingSet64實際駐留在 RAM 的記憶體數字
...繼續閱讀 »

Mutex:一種跨 Process 之間的等待機制 - 在 .NET 應用程式的實踐 (下)

在前篇這樣的兩個應用程式的撰寫在 Windows 上執行時是可以順利完成所需的要求。

但一旦放到 "非 Windows" 上的環境執行時,卻發生了異狀:
應用程式 A 居然找不到應用程式 B 所建立的 Mutex

發生了執行 30 次(每次等待 1 秒後再找) 後,直接結束應用程式 A 的情況。

難道???

...繼續閱讀 »

Mutex:一種跨 Process 之間的等待機制 - 在 .NET 應用程式的實踐 (上)

名詞定義:
Process - 已被載入到記憶體中執行的 Program 。

應用程式 A 需要等待應用程式 B 完成動作 C 之後,才能繼續執行;換句話說,在 B 執行完 C 之前,應用程式 A 必須被 blocked(阻塞)或 paused(暫停)

這樣的需求,在現代化的作業系統的設計中,有很多種方式可以完成,例如:signal、pipe、mutex、semaphore…等。

...繼續閱讀 »

在 macOS 中使用 brew 安裝 dotnet 後的一些設定調整

dotnet 在 macOS 安裝後,要能完全移除其實需要一點 CLI 的知識外,也要多研讀一下 Microsoft Learn:
如何移除 .NET 執行階段和 SDK 的介紹。

或是使用 ".NET 解除安裝工具" 來進行。

但如果不介意統一用 brew 來安裝 dotnet 的時候;再加上一點點小技巧,那其實管理、使用與解除安裝時都會相對方便的。

...繼續閱讀 »

Nuget 的中央軟體套件管理 (CPM) 使用

在 Nuget 的相依協助下,已經某種程度上可以是協助擺脫 dll hell 的一大工程(功臣?)

但是如果在一個解決方案當中有多個專案要引用相同的 Nuget 套件時,可能會發生各個不同的專案有各自使用不同 Nuget 套件的版本(套件相同版本不同)。

而每次要更新某個 Nuget 套件時就會要針對不同專案要處理更新,就會顯得相當繁瑣。

在 .NET 6.0 的設計中,開始可以使用中央的套件管理 Central Package Management (CPM) 的處理方式來處理這個問題。

...繼續閱讀 »