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

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

...繼續閱讀 »

[料理佳餚] C# 泛型類別條件約束 where 無法約束帶有參數的建構式怎麼辦?

  • 373
  • 0
  • C#
  • 2019-07-29

公司內的一個系統的開發風格轉變,Data Model 必須設計成 Immutable(不可變)的類別,其中一部分會被用在泛型上,由於 Immutable 類別是不能有無參數建構式的,所以被用在泛型的時候,它就不能用 where 進行 new() 的條件約束,沒辦法做 new() 的條件約束,就無法呼叫泛型類別的建構式來產生 Instance,著實困擾。

...繼續閱讀 »

[小菜一碟] C# 中的奇門遁甲 - 隱含轉換(implicit)

  • 589
  • 0
  • C#
  • 2019-04-28

在 C# 中常常因為需要配合參數而動態地產生相對應的 SQL 查詢條件字串,StringBuilder 應該是公認能兼顧字串串接效能的解法,不過加號(+)還真是好用啊!相較於使用 StringBuilder,用加號來串接字串簡單又直接,因此我利用隱含轉換(implicit)來搞一個用加號串接字串,但背後其實是 StringBuilder 的解法。

...繼續閱讀 »

[桌邊服務] DateTime 本身有沒有包含時區的資訊?

  • 687
  • 0
  • C#
  • 2019-04-15

雖然我們大部分的服務對象是在台灣,不過我們會揭露一些國際上的資訊給使用者知曉,關於時區的問題,沒有被砸過腳還真的不會去仔細研究,尤其某些時區還會實施日光節約時間,所以千萬不要再用加減小時法來處理時區轉換的問題,有興趣的朋友可以參考我過去的文章,今天要來討論的是 DateTime 本身有沒有包含時區的資訊?

...繼續閱讀 »

[料理佳餚] C# 使用 Google APIs 來控制 GCE(Google Compute Engine)VM 的開啟跟關閉

  • 379
  • 0
  • GCP
  • 2019-03-31

如果我們明確地知道我們的服務尖峰及離峰時間,那麼我們可以在離峰時間關閉一些機器來節省一點成本,GCE 沒有提供排程開關機的設定,所以我們只好自己寫,Google APIs 的文件告訴我們可以選擇純 HTTP 方式,或是使用 Google APIs Client Library 來控制 VM 的開關機,底下我就用 Google APIs Client Library for .NET 來撰寫控制 VM 開關機的程式。

...繼續閱讀 »

[小菜一碟] 將 2 的 n 次方加總結果再拆解回來

  • 297
  • 0
  • C#
  • 2019-03-18

在狀態表達的設計手法中,有一種是以 2 的 n 次方來設計,例如:Status1 = 1、Status2 = 2、Status3 = 4、...依此類推,當我們得知某物件的 Status = 5,我們就知道它包含了 Status1 以及 Status3(因為 5 = 1 + 4),.NET Framework 中有一個列舉型別 System.Reflection.BindingFlags 就是這樣設計的,那重點來了,我們要怎麼知道任意一個正整數可以由哪些 2 的次方加總結果呢?

...繼續閱讀 »

[料理佳餚] C# 實作二階段提交(Two-phase Commit),即使 SQL Server 沒有啟用 MSDTC 也能做分散式交易。

  • 785
  • 0
  • C#
  • 2019-02-24

無論是業務需求或是 IT 需求的關係,依據不同需要將資料庫分放在不同伺服器的情形很多見,要進行跨資料庫伺服器交易我們可以啟用 MSDTC 服務來達成,我就在想能不能不去動伺服器的設定,在應用程式端來實現分散式交易?

...繼續閱讀 »