86 不存在的戰區 - 請為自己努力活過而感到驕傲
前言人在前進時,時常懷疑自我價值在挫折之中,容易陷入內心的拉扯與消耗彷彿眼前的陰影遮蔽了過往一路走來的堅持與努力曾經一步一腳印走過的路,如今竟變得模糊不清。
蕾娜曾對辛耶說過
想要戰鬥到底、想要活到最後,現在才能在這裡
我想,你可以更為此感到驕傲
故事大綱故事以戰火連天的前線作為開場,硝煙瀰漫、砲火轟鳴,大火照亮了那群平均年齡不到 20 歲的年輕士兵臉龐。然而,真正令人不寒而慄的,並非戰場本身,而是那冰冷無情且毫無人性的聲音,他透過通訊設備,不斷以侮辱與命令鞭策著這群尚未成年便踏入戰場的孩子…
就在我們尚未從戰爭的殘酷中回神,鏡頭一轉,卻進入另外一個不同的世界 – 溫柔清晨的陽光灑落在潔白的床連與床鋪上,共和國的居民在柔軟的被窩中悠悠醒來,伴隨著古典音樂的樂聲享用早餐,一切顯得如此安詳、那麼的理所當然、前線與後方之間的鴻溝,在這一瞬間顯得如此殘酷而荒謬
這不正是現實的倒影嗎?一場冠冕堂皇之下,悄然 ...
Pagination
照著進度走的人生OFFSET / FETCH程式端 VS Stored ProcedureOFFSET 實現分頁的效能問題「鍵值分頁(Keyset Pagination)」優化Keyset Pagination 真的是「萬能解法」嗎如果資料在分頁期間被新增或刪除,OFFSET 與 Keyset 哪個更安全summary世界是一整本書,人生可以被清楚地切成第 1 頁、第 2 頁、第 50 頁,我只要照著頁碼翻,就一定能看到我該看到的那一段,像是 30 歲要做到第 30 頁、35 歲要結婚、40 歲要買房,同齡人u3已經在地第 20 頁,我怎麼還在第 15 頁?
因為你的人生座標來自「別人在哪一頁」,這就是 OFFSET FETCH!
感覺 OFFSET 規規矩矩的,一頁頁走應該沒甚麼問題,然而,OFFSET 有一個隱藏陷阱!
世界不是靜止的書,有人中途離場(刪資料)、有人突然插隊(新增資料),頁碼可能看起來沒有錯,但那一頁的內容已經變了,明明我照順序走,卻發現自己重複經歷同樣的痛苦,又或者莫名其妙的錯過了一些重要的東西,OFFSET 的人生,會迷失在比較與對齊之中。也不是說 OFFSE ...
取得系統資訊
Process.GetProcesses() 範圍並不限於應用程式本身,它會返回系統中所有正在執行的 Process 資訊,這包括其他應用程式、系統服務以及其他使用者的 Process,但具體可見的範圍可能受到權限的限制。
WorkingSet64 是 Process 的實際記憶體使用量(物理記憶體),數值為 bytes。
Lambda Expression 應用 - TotalMemory簡單來說就是在方法呼叫端傳入我們的條件 (像是傳入一個 Where 一樣),來決定內部的計算邏輯範圍
這個實作情境是這樣,使用 Process.GetProcesses() 取得所有 Process,並且篩選 > 20 MB 的 Process,最後計算前兩名的資訊
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354void Main(){ DisplayMemory(memory => memory > 20 * 1024 ...
LambdaExpression
Lambda Expression 應用 - 用強型別動態指定欄位名稱
🌿 Lambda 的誕生:從 Delegate 到優雅的表達式Delegate:型別安全的 Callback🌸 Expression-bodied 屬性🌸 LINQ🌸 用強型別動態指定欄位名稱在 Task.Run 放 Lambda(背景執行)在 LINQ 裡塞 async LambdaParallel.ForEachAsync(.NET 6+)搭配 async Lambda🌸 多語系主題推薦頁summaryLambda 表達式(Lambda Expression) 並不是從天而降的魔法。它的根基,其實建立在一個更早、更樸實的概念上 : delegate
所謂 Callback(回呼),是一種「把方法當作參數傳遞」的設計方式。舉個例子,假設你想在任務完成後執行一段通知程式
12345void DownloadFile(string url, Action onCompleted){ Console.WriteLine($"Downloading {url}. ...
讓他代我做:Delegate 從使用到設計,為目的而進化
在人生的旅途中,有些行動,不是為了此刻,而是為了將來某個尚未到來的時刻,悄悄種下伏筆。
就像在一場重要的典禮上,你輕聲叮囑朋友:「等我上台尻校長的光頭時,幫我拍一張照片。」你清楚地設定了做什麼,但並沒有干涉朋友用哪台相機、站在哪個角度,只是信任對方,讓他自由捕捉那個瞬間。
又像叫了一份外送,你指定了:「請把三商巧福送到我家門口。」你決定了目標,但至於外送員選擇騎機車、開車,走哪條路線抵達,則完全交給他靈活安排。
你無需親手掌控每一個細節,只需種下清楚的意圖,並信任交付
這種「指定意圖,委託執行」的方式,在程式設計的世界裡的 Delegate
在上一篇中,我們認識了 Delegate 的基本結構與意義;而這一篇,我們將走得更深,去感受它在現實設計中如何展現靈活的力量,又如何結合泛型,成為更強大而多變的工具;更會看見它化身為 Action、Func、Predicate,滲透進每一段程式邏輯之中。
從重複中提煉靈活:泛型的智慧設計在開發過程中,我們遇過這種情況:
12345public delegate int ...
讓他代我做:Delegate 應用實踐
在 第一篇
我們從「什麼是委派(Delegate)」開始,理解它的誕生是為了解決什麼樣的需求:將行為作為參數傳遞。
接著第二篇
我們進一步探討了實務上會遇到的挑戰,以及 .NET 框架提供的標準解法(像是泛型委派 Action、Func、Predicate)。
這次,我們要來真正動手,體會 Delegate 如何在日常開發中,帶來更高的彈性與更好的設計感。
🏪 動態選擇條件總結訂單資訊💬說明
你有一組訂單資料 Order,客戶希望可以動態選擇條件,例如:
只加總金額超過 500 的訂單
只加總客戶名稱是 “Allen” 的訂單
加總指定客戶清單裡的人(比如 VIP 客戶)
請設計一個方法,讓使用者自訂篩選條件(以委派的方式傳入),然後針對符合條件的訂單做加總。
解析
先定義甚麼是 Order
123456789101112public class Order{ public int Id { get; set; } public string OrderId { get; set; } public string Cust ...
讓他代我說:Delegate 的溫柔設計學
在人生裡,我們總在不知不覺中進行著「委派」。不是公司開會那種,而是日常裡那些再自然不過的小任務外包。
👦:「阿嬤,我要出門了,幫我跟媽媽說我會晚點回家~」你沒直接說,而是把「傳話」這件事交給了阿嬤。這一刻,你不是孫子,你是個指派 callback 的主控者。
而在程式世界裡,這樣的行為就叫作:delegate ——拜託別人幫你做某事,但怎麼做、什麼時候做,全憑對方自由發揮。
123456789101112131415161718//// 定義要執行的任務的事件樣貌delegate void PassMessage(string message);public class You{ public void AskSomeoneToPassMessage(PassMessage messenger) { messenger("我會晚一點回家"); }}//// 執行者自己決定怎麼執行void GrandmaPassMessage(string msg){ Console.Writ ...
Deep Clone
鏡中的自己Shallow Copy & Deep Copy透過序列化進行 Deep CopyAutomapper 進行 Deep Copysummary還記得小時候,我總覺得「鏡中的自己」很神奇。他會跟著我一起笑、一起生氣、一起模仿我的每個動作。但漸漸長大才明白——那並不是真正的「另一個我」,而只是一個淺薄的影子。
程式世界裡,物件的複製也是這樣。有時候,我們只是得到了「鏡子裡的自己」(Shallow Copy),稍不注意,動到這邊,另一邊也跟著被牽連。而有時候,我們會想要的是一個「能獨立走出鏡子」的自己(Deep Copy),擁有完全不同的記憶體、不同的命運。
Shallow Copy 只複製外層,裡面參考到的物件還是共用同一份Deep Copy 會連內層參考物件一起複製,整包都變成新的
假設有這個類別
1234567891011121314151617public class Person{ public string Name { get; set; } public Address Address { get; set; & ...
Asynchronous Programming - 第七章:非同步之林:執行緒的四季輪迴
forestMain ThreadWorker ThreadsI/O Completion ThreadsCustom Thread「人力底線」與「人力上限」「ThreadPool 實驗summary在這片名為非同步之林的廣闊森林裡,藏著一家智慧餐廳。這間餐廳一天到晚接單不斷,每張訂單都是一個任務,廚房裡的人力有限,卻得讓所有客人都吃得快又好、不讓誰在門口久等,還得同時兼顧廚房資源的高效運用。
這家餐廳裡,有忙碌的櫃台接待員(Main Thread),有後廚大廚團隊(Worker Threads),有專門通知外送到達的取餐小組(I/O Completion Threads),偶爾,老闆還會臨時請來私廚(Custom Thread),用一場又一場執行緒的調度,撐起這座非同步之林裡飲食服務
🎵 Main Thread = 櫃台接待員負責第一時間接待客人、記錄每張訂單、回答客人問題。櫃台小姐(Main Thread)不能被卡住,一卡住,後面來的客人全部排隊大塞車!所以櫃台只是登記完,馬上就把訂單丟給後廚(ThreadPool)去做。
✅ 在 ASP.NET 裡,Ma ...
Asynchronous Programming - 第八章:一座池子的呼吸
一座池子的呼吸Task.Run 觀察 ThreadPool 的重複使用Starvation-Avoidance Mechanism 怕你餓機制ThroughputClimbing Heuristic - 爬山捷思法為什麼增加 Threads 並不一定帶來更高 Throughput?實驗一.實驗設計實驗一. 結果觀察實驗二.開頭即設定 200 條最低執行緒數量實驗三.實驗設計實驗三.觀察實驗結果summary在雲端深處,棲息著一個無形的池子,我們稱它為 ThreadPool,它不眠不休,日夜吞吐無數任務,是城市裡最沉默卻最可靠的工廠。每一個建立 Task 的瞬間,就像把工作單投入池子,任它激起層層漣漪,有人接手、有人閒置、有人待命
我們在這裡低聲詠唱,希望當高峰來臨,池子能無限擴張,當潮水退去,池子也能自我收束,忠實而溫順,既不餓死任務,也不浪費資源。當你想起這座池子,它從未離開,只是默默在背後,調度著一切的並行與秩序12345678910111213141516171819202122232425262728293031323334353637void Main(){ Tas ...










