[廚餘回收] 關於 ASP.NET MVC 中 OutputCache 的 VaryByParam 屬性有一個不盡善盡美的地方

這天在追查為何 A 客戶的訂單會出貨到 B 客戶哪裡去? 於是我看到了下面這段程式碼:

在 Login 的 Action 上面被加了 OutputCacheAttribute,Duration 屬性被設成 3,其中還用到了 VaryByParam 屬性,我猜寫這段 Code 的工程師應該是想要為每個登入的帳號做 OutputCache,這樣設定沒有問題,問題出在 HTTP Request 的發送內容。

...繼續閱讀 »

[廚餘回收] 中了一個 C# 模式比對(Pattern Matching)var 的陷阱

  • 354
  • 0
  • C#
  • 2019-10-07

C# 從 7.0 開始加入了模式比對(Pattern Matching),最大的改變是將 switch 從常數比對中解放,讓 switch 可以比對運算式,到了 C# 8.0 更猛了,微軟弄了一個遞迴模式比對(Recursive Pattern Matching),大括號 "{}" 及小括號 "()" 寫到你不要不要的,但是模式比對裡面藏了一個 var 的陷阱,我就踩中了。

...繼續閱讀 »

[料理佳餚] 開發分散式運算的應用程式時,加入不可變性(Immutability)的設計來加強意圖。

由於 CPU 時脈的發展受限,因此 CPU 的發展不再往更高時脈前進,而是往更多核心數前進,隨之而來的,便是軟體設計師需要調整軟體的設計,讓原本的演算法能夠分散執行,充分地利用多核心的資源,使程式執行起來更有效率,而在開發分散式運算應用程式時,我個人是認為應該加入不可變性(Immutability)的設計,來強調其分散式運算的意圖。

...繼續閱讀 »

[小菜一碟] 如何讓網頁跳出「系統可能不會儲存您所做的變更」提示,提醒使用者編輯的內容尚未儲存?

觀察到使用者不時地被一個小問題給困擾著,在表單中編輯一些資訊後,突然岔去做其他事情,回來之後覺得剛剛的表單應該已經處理完了,就把網頁給關掉了,殊不知他剛剛編輯的資訊並沒有儲存,往往發現時,是已經被客訴了,要解決這個問題有很多面向的方式,系統這邊能幫的其中一種方法就是提醒使用者資料沒有儲存。

...繼續閱讀 »

[廚餘回收] 在半夜偷偷吃掉 CPU 資源的暗夜怪客 - MsMpEng.exe(Windows Defender)

前些日子開了一台新的 SQL Server,最近從監控當中發現凌晨 02:10 ~ 02:30 之間 CPU 被拉高,日復一日都是相同的時間點。

看起來吃了不少 CPU 資源,由於這段時間嚴格來講並不算是服務的離峰時間,還是希望將珍貴的 CPU 資源留給服務,所以必須查出來到底是誰吃掉了 CPU 的資源?

...繼續閱讀 »

[料理佳餚] SQL Server 的叢集索引(Clustered Index)欄位不一定都要是主鍵(Primary Key)

我個人認為 SQL Server 預設拿主鍵(Primary Key)來當叢集索引(Clustered Index)欄位這件事情,應該要被重新考慮,以目的來講,主鍵與叢集索引的關係其實並不大,主鍵的目的是確保資料是唯一且正確的,而叢集索引的目的是提升查詢效率,所以在這點上,我覺得在資料表一個開始設計的時候,預設是分開考量的會比較恰當。

...繼續閱讀 »

[料理佳餚] Dapper 用起來很友善,但是預設的參數型別對執行計劃不太友善。

用過 Dapper 的朋友應該對它是愛不釋手,最近在一個對效能敏感的系統上 tune SQL 查詢語句時,發現到 SQL 參數型別的不同及使不使用 SQL 參數,對執行計劃的選擇影響甚大,相同的查詢條件及結果,只因改了參數的型別,執行計劃就跟著改變,查詢成本也跟著拉高。

...繼續閱讀 »