Dotnet_parallel

一個 Batch Task 遇到一段 Code, SQL.Select in a for-loop that runs 25k times 特別是 for-loop 內 以 await 去使用了 async 的 DB Layer Func. 我請團隊在 Parallel 的修改版本加上限制。 var parallel = new ParallelOptions { MaxDegreeOfParallelism = 5 }; 也與另一個做法 Task.Run, Task.WhenAll 進一步區隔。 ref: Running Async Foreach Loop C# async await Parallel.ForEach vs Task.Run and Task.WhenAll https://gitter.im/npgsql/npgsql?at=595a0319c101bc4e3a46654d 系統式思考 這個課題在團隊內的討論很有趣, 討論過程中對於可能的問題不乏 AP Logic 有問題、SQL 有問題、…, 但卻不太動手實測每段時間。 那段邏輯在開發環境中執行一個 SQL SELECT Query 約 2ms, 但 For Loop 高達 3萬筆資料, 在 不修改 AP 主 Logic & SQL 的前提下可發揮的空間有限(數位轉型日常,除非先完成驗證過結果正確), 因此團隊將 部分邏輯 改為 Parallel 是可以進行嘗試的。 (前提是該 AP Logic 不會因此修改造成 髒資料)...

September 30, 2022

RepoDB_C#

RepoDB 在 Generic Repository Pattern 中很好用, 免去使用 Dapper 去自建 SQL 產生器, 但是有幾個限制 RepoDB Limitations, 其中一個令人訝異 -> Composite Keys。 Composite Keys RepoDB 只會處理 1 個 Primary Key…. 這邊紀錄兩個相關的資訊 Update + condition termsList.Add( new QueryField('Id', Operation.Equal, '10095') ); termsList.Add( new QueryField('Name', Operation.Equal, 'John') ); ret = dbConn.Update(entity, new QueryGroup(termsList, Conjunction.And)); Primary Properties Model 中標註 Mapping, public class FMRMUSRT { [Primary] // Primary decoration public string Id { get; set; } [Primary] // Primary decoration public string item_cd { get; set; } public string?...

April 27, 2022