[料理佳餚] C# 三種實作分散鎖定的方式

分散鎖定的使用場景通常是我們希望某個資源,同一個時間存取它的程序不要超過一個,在同一個應用程式中我們有 lock 陳述式Monitor.EnterMonitor.TryEnter 可以用來做鎖定,當有一個以上的應用程式,甚至是跨不同機器的應用程式要做鎖定,這個會需要用到額外的資源,我們儘量利用我們手邊有的資源來做這件事。

...繼續閱讀 »

[小菜一碟] 檔案目前位置取得方法的不同,而不是不同的檔案目前位置取得方法。

  • 378
  • 0
  • C#
  • 2019-02-04

這篇文章中網友的留言吸引了我的注意,.NET Framework 提供了至少三種取得檔案目前位置的方法:

  • AppDomain.CurrentDomain.BaseDirectory
  • System.Reflection.Assembly.GetExecutingAssembly().Location
  • System.IO.Directory.GetCurrentDirectory()

我還真不知道它們具體上的差異,趁這個機會做了一下實驗順便記錄下來,也提供給各位朋友參考。

...繼續閱讀 »

[食譜好菜] Json.NET 處理多型的反序列化

多型在像是 C#、爪哇(用中文應該就不會被告了)這種強型別的物件導向程式語言,要將一個抽象類別的實例存到關聯式資料庫或是做序列化/反序列化,都需要另外處理,關於多型跟關聯式資料庫的對應方法我已經寫在這篇文章裡面,這篇要來寫寫多型如何做 JSON 的序列化/反序列化。

...繼續閱讀 »

[料理佳餚] 用 ValueTuple 解放雞肋類別

  • 434
  • 0
  • C#
  • 2019-08-30

我們呼叫一個函式原則上以回傳一個結果為優,偶爾像 int.TryParse 使用 out 修飾詞,或是使用 Tuple 類別 來多吐一些結果,不過這些都不如將多個結果封裝成一個類別還來的合適,但是如果私有函式有回傳多個結果的需求,為此定義一個類別就顯得有些雞肋,除了要取一個適當的名字之外,還要定義它的存取限制,把它弄成 public 也不是,弄成 private 放在當前類別裡面又覺得「嘖...」。

...繼續閱讀 »

[食譜好菜] 檔案及資料夾的路徑不用自己兜,讓 System.IO.Path 靜態類別來做會方便許多。

  • 1253
  • 0
  • C#
  • 2018-09-10

前幾天處理了一個檔案沒更新的問題,請看下圖:

這是一個 UNC 路徑,可以看到它路徑中間有兩個 \,然後它就爆了。

會造成這樣的原因是因為在原始程式碼中,在兜路徑的時候沒有處理尾綴的 \ 的數量,而使得尾綴的 \ 多了或少了,路徑就失效了。

...繼續閱讀 »

[廚餘回收] Windows 工作排程器(Task Scheduler)啟動程式取得與執行檔所在相同目錄

  • 969
  • 0
  • C#
  • 2018-07-31

這個雷我踩了不下三次,寫下來記錄一下,C# 程式要取得當前目錄的方法我們下關鍵字搜尋可以搜出一堆解決方案,沒意外的話第一個搜尋結果通常是 Directory.GetCurrentDirectory 方法(System.IO) - MSDN - Microsoft,但是這個方法在程式是由 Windows 工作排程器(Task Scheduler)啟動的狀況下就不 Work 了。

...繼續閱讀 »

[料理佳餚] 將 Function 序列化為二進位資料之後傳遞給另一個應用程式執行

  • 484
  • 0
  • C#
  • 2017-12-01

有這個議題是既有系統的 Cache 邏輯在 Cache 沒有命中的時候,會啟動 lock 機制,然後去執行一個由呼叫端傳進來的 delegate function 去後端資料庫重新取得資料,可是我們都知道每家公司多多少少都有遺留一些「初學者程式碼」,這些初學者程式碼不一定是初學者寫的,但它有時候執行的效能並不是很好,在這種情況再搭配 lock 機制之下,後面進來的 Request 就塞住了,進而影響客戶端的響應速度。

...繼續閱讀 »