[.NET][C#]物件建立之淺層複製(Shallow Copy) vs 深層複製(Deep Copy)

最近踩到一個legacy code 在C#物件複製的陳年小雷,拆解炸彈的同時也寫筆記! 

有時我們會在類別(class)中加入Object.MemberwiseClone方法來提供物件的複製(clone),舊程式使用新物件裡的屬性剛好都是用new關鍵字建立,大概像下面的方式使用屬性:  

p2.IdInfo = new IdInfo(17);

很幸運一直沒發生參考問題,最近改用直接指派,類似下面的寫法:  

p2.IdInfo.IdNumber = 17;

測試時大驚!原始物件p1的值竟然被覆蓋了,花了時間才發現自己對MemberwiseClone的定義不夠清楚。

 

...繼續閱讀 »

[.NET][C#]大量New CultureInfo對效能的影響

同事在處理大量資料的轉檔,專案用C#讀取大量文字檔案,讀取後要做基本欄位檢核,因為程式處理速度較慢(10萬筆20分鐘),於是幫忙同事一起抓原因。花了幾個小時後,發現重複New CultureInfo 對效能帶來巨大的影響,快來筆記。

...繼續閱讀 »

[.NET][Redis]Redis Cache In Azure筆記

為了實現網站橫向擴充的架構,狀態或是資料快取需要一個共用的儲存機制,除了儲存在資料庫(資料庫也需要散熱):

  • ASP.NET Session可以選State Server。
  • 如果是快取可以選Windows Server AppFabric Cache(Session也可以存)。

自從要開始支援橫向擴充就這樣盤算著及設計,昨天和公司年輕熱血的工程師討論技術議題,認識一種NoSQL的好物:Redis,晚上不跑步,嘗試使用Azure設定快取伺服器。

...繼續閱讀 »

[.NET][C#]Barcode(Interleaved 2 of 5)行李條碼

提起Barcode就想到喉嚨借過,ㄟ~夜店亂入,是1D線性或是2D圖形條碼,想起先前案子曾產出超商繳款條碼(code39),拿起從法蘭克福回來的行李條碼,好像有點不同,有種好熱想把行李條碼(Baggage Barcode)解開,來一趟行李分檢。

...繼續閱讀 »

[.NET][C#]Office Word套版(Form) Open source

  • 16086
  • 0
  • .NET
  • 2016-02-10

因為程式在Server side產生Office套版文件出了一些小問題,case到微軟,依循微軟技術諮詢人員的建議,避免在Server端使用,雖然沒扣點數,但之後就一直找尋Microsoft.Office.Interop的替代方案:

  • 理所當然NPOI來取代Excel套版(Apache License 2.0)
  • 最近找了DocX來替代Word套版(Ms-PL)

 

...繼續閱讀 »

[C#][.NET]16進位字串(Hex string)與位元組陣列Byte[]轉換

  • 54920
  • 0
  • .NET
  • 2016-02-06

碰到的幾種密碼演算法將明文的組成及密文的輸出使用16進位字串(Hex string),但進行邏輯運算時則需要轉換為Byte[],
為了便於使用,偷偷把轉換功能寫進Extensions,因為火星任務會用到。

  • 16進位數字組成的字串轉換為Byte[]
  • Byte[]轉換為16進位數字字串
  • 取出字串右邊開始的指定數目字元
...繼續閱讀 »