Category: .net

野外求生系列又來了,今天要示範「如何在沒有開發工具(Visual Studio、VSCode、MSBuild、LINQPad...)的環境生出 Console Application .exe 整合既有 DLL 程式庫做測試?」 情境是這樣的,主機上有某支 .NET 程式出錯,我們嚴重懷疑是某段 O...

很早之前看過一篇關於 HttpClient 生命週期的討論,當時沒什麼感覺,這陣子研究 NSwag,注意到 NSwag 產生的客戶端程式庫,HttpClient 預設被當作建構式參數,由外界傳入生命週期自理。 但一方面它又提供參數允許採用每次呼叫自動建立的可拋做法,並可選擇是否使用完畢要不要 Dis...

網友發問:「 LINQ 可以對物件陣列進行 Pivot 轉換嗎?」 Sure, Of Course, Why Not? 對 Pivot 印象模糊的同學可先溫習這篇:Using PIVOT In SQL 2005,而本文也直接用該文的 Log 統計當例子。 假設原始資料長這樣: LogTime St...

LINQ 誕生超過十年(2007 隨 .NET 3.5 一起問市),我平日寫 .NET 程式早已「無 LINQ 不歡」,上癮程度甚至接近「無 LINQ 吾寧死」 (LINQ or Die),但我知道有不少朋友在開發時,會參考前人程式或依循習慣(或現有程式庫),繼續沿用 DataTable,for 迴...

ClosedXML 是我用程式操作 Excel 時的奧林匹克指定程式庫(參考:令人驚豔的Excel程式庫 - ClosedXML),在 .xls 格式退休後,在 .NET 中要讀寫操作 Excel 檔案,非它莫屬,尤其結合 LINQ 用來更是得心應手。最近學到一點小眉角,筆記備忘。 假設我有個 Ex...

Coding4Fun 過程產生一個統計 FB 按讚數的小需求,手上有一份 URL 清單,我想統計各網頁臉書分享區塊的按讚數。(即下圖中的 239) 之前我用過一個笨方法,用 WebClient 抓該區塊的 IFrame 網址抓回 HTML 再從中解析,這回試試更有效率的正統做法。 Facebook...

組件繫結重新導向是處理 .NET 組件版本衝突的捷徑, 將特定版號範圍重新導向統一版本,以化解部分程式要用 A.dll 1.1 版,某些要用 A.dll 1.2 的版本衝突。 版本衝突問題在實務上並不算罕見,過去的處理經驗還不少,一併整理在此提供參考: 組件繫結重新導向功能的實地觀察--以ODP....

.NET 效能測試首次執行偏慢現象解析一文得到老讀者 Lane Kuo 的迴響,補充一篇好文:.NET Just in Time Compilation and Warming up Your System by Abhinaba Basu,一掃我對 .NET JIT 編譯的迷思。 .NET 的 d...

上回研究 Stopwatch 測量微秒精確度有個小插曲,第一次執行 MD5、SHA1 運算總會特別慢,慢了五倍有餘,先跑 MD5 慢的是 MD5,先跑 SHA1 慢的就是 SHA1,之後的數字才正常。 這個現象挺有趣,初次起始慢讓我們優先想到的原因多半與笨重資源有關,例如:建立網路連線、開啟檔案、配...

上週的 SSL 憑證茶包還有下集。 經手動匯入 TWCA 憑證,IE/Chrome 連上目標 HTTPS 網頁已正常,但呼叫廠商 API 的 .NET 服務程式仍冒出 Could not establish trust relationship for SSL/TLS secure channel ...

跟同事討論到高負載 .NET Logging 議題。某程式有巨量 Log 寫入需求,執行幾小時 Log 量可達數 GB,甚至懷疑寫 Log 可能成為效率瓶頸之一,程式目前使用 log4net,考是是否應更換成其他 Log 程式庫?如果要換,有哪些選擇? 早年用過 log4net,複雜的 XML 設定...

介紹一個比較進階的效能議題 - False Sharing,先分享兩篇文章: 多執行緒程式的效能隱形殺手 - False sharing by Jed False-sharing 以及其解法 (以 Golang 為例) by Genchi Lu False Sharing 是一種開發時不易意識到...

因安裝軟體需求,要在 Windows Enterprise 上安裝 .NET 4.7.2,卻得到「這個作業系統不支援 .NET Framework 4.7.2」訊息。 呼叫 WinVer 查了版本,版本為 10.0,組建 10240。 查到這裡我有點疑惑,Windows 10 版號不是 1703...

透過 WebClient.DownloadFile() 或 DownloadData() 下載檔案對 .NET 老鳥而言是雕蟲小技(參考:CODE-使用C#程式從網站下載檔案 ),但此種寫法檔名需自行指定。若下載對象非靜態檔案,伺服器端程式會透過 Content-Disposition Respon...

同事分享了一記讓 32 位元 .NET 程式突破 2GB 記憶體上限的密技,讓我不禁獻上了膝蓋,當然要轉分享一下。 .NET 編譯成 32 位元與 64 位元最大的差異在於可用記憶體上限,32 位元的記憶體定址上限為 4GB,其中 2GB 配置給作業系統核心模式,應用程式為使用者模式只有 2G...