in

Darkthread

黑暗執行緒
All Tags » .NET (RSS)

Browse by Tags

  • 大型物件 Json.NET 序列化經驗一則

    附檔管理模組裡採用 JSON 格式保存暫存物件,將附檔物件序列化暫存成檔案,稍後寫入資料庫時再還原取出資料,直覺又方便。不料因附檔物件內含檔案內容(byte[])體積龐大,在處理極端案例時踢到記憶體不足的鐵板。 批次作業程式為 32 位元模式,依經驗記憶體上限約 1.8 GB,一開始很直覺地將資料用 JsonConvert.SerialObject() 轉成 JSON 字串再用 File.WriteAllText() 寫成檔案,之後用 File.ReadAllText() 讀取 JSON 字串,再以 JsonConvert.DeserializeObject<T>() 還原回物件:...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 09-18-2017
  • Dictionary 多執行緒存取衝突吃光 CPU

    這是一個老鳥失足,程式沒寫好吃光 CPU 的故事。開始前推薦大家兩篇先修知識: WinDBG 應用實例:找出 ASP.NET CPU 100% 原因 ASP.NET CPU 飆高問題之傻瓜分析工具-DebugDiag Tools 接獲通報,某主機在離峰時段出現 CPU 維持 50% 高檔狀況,來源則是某個 ASP.NET AppPool Process。依照 SOP,先擷取 Memory Dump 後再重啟 AppPool。(提醒:建立 Dump 檔前需確認 AppPool 是 32 位元還是 64 位元,若為 32 位元需 改用 32 位元版 TaskManager ,32 位元版 TaskManager...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 09-04-2017
  • dynamic 參數之效能損耗實測

    依據 前篇文章 :參數傳入 dynamic 會讓函式傳回值也變成 dynamic,導致無法使用 LINQ Lambda 運算式。文末提到,依據 方法多載(Method Overloading)與 dynamic 一文的研究心得,.NET 呼叫函式時若遇到參數為 dynamic 時,將改用System.Runtime.CompilerServices、System.CSharp.RuntimeBinder 命名空間物件與方法間接觸發,程序曲拆繁瑣許多。由此推測,參數傳入 dynamic 型別肯定會產生效能損耗,好奇心驅使之下,索性寫幾行程式實測親見為憑。 我設計測試程式如下,執行 100 萬次 "2017...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-27-2017
  • ViewBag dynamic 特性導致無法使用 LINQ 語法

    寫 ASP.NET MVC CSHTML 時,我很習慣用 ViewBag 將變數從 Controller 傳到 View 端,只是簡單傳遞幾個字串、數值,為此大費周章宣告 Model 型別有點殺雞用牛刀。我們都知道 ViewBag 是一個 dynamic 型別,而 dynamic 型別的屬性、方法也會被視為 dynamic,編譯階段不檢查,執行階段見真章。 不過,最近學到一件事:一旦函式參數傳入 dynamic,其傳回值也會被視為 dynamic,而此時將無法使用 Lambda 運算式 。 來看下面這個例子。我計算透過 ViewBag.DateString 傳遞 "2017/08/26"格式字串...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-25-2017
  • 小技巧-使用匿名型別快速捏出指定JSON格式

    同事有個小需求,已知城市、區域及郵遞區號要產生如下規格的 JSON 餵到前端: { "rows" : { "row" : [ { "City" : "台北市" , "Area" : "文山區" , "ZIP" : "116" } ] } } 先前介紹過 JObject 結合 dynamic 的 花式玩法 可以快速達成目標: static void TestJObject( string city, string area, string...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-25-2017
  • C# 連線 HTTPS 網站發生驗證失敗導致基礎連接已關閉

    某台透過 .NET WebClient 物件爬網頁抓資料排程忽然出現: 基礎連接已關閉: 傳送時發生未預期的錯誤。 ---> System.IO.IOException: 驗證失敗,因為遠端群體已經關閉傳輸資料流。 The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream 有趣的是...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-19-2017
  • Json.NET 日期型別時區問題之終極解法

    一直以來常被 JSON 日期序列化時區問題困擾,問題主要發生於從資料庫查詢日期欄位,轉為 .NET DateTime 型別時其 Kind 屬性為 Unspecified,而以 DateTime.Now、DateTime.Today 取得的日期物件,Kind 則為 Local,二者不一致可能導致前端出現 8 小時時差。為解決問題,先前想到的做法是先宣告 JsonConvert.DefaultSettings DateTimeZoneHandling = DateTimeZoneHandling.Utc,將 DateTime 統一轉為 "yyyy-MM-ddTHH:mm:ssZ"...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-08-2017
  • 方法多載(Method Overloading)與 dynamic

    方法 多載(Overloading) 是指多個名稱相同但參數個數或型別不同的方法,編譯器依傳入參數的個數、型別與順序決定使用哪一個方法。概念上多載讓方法變得更彈性,能接受不同參數組合,符合更多應用情境。舉個常見的例子,Convert.ToByte() 可傳入 int, short, string, float, double, decimal, char… 等輸入值,將其轉成 byte,傳入 string 時還能指定 16 進位(fromBase)或 IFormatProvider。 我有個根深蒂固的觀念-多載解析都發生在編譯期間,編譯器依參數將函式指標指向同名方法的其中一個。上回在談 擴充方法參數傳入...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-03-2017
  • 程式範例-使用 Json.NET 將 Key/Value 陣列轉為物件屬性

    專案遇到的需求:程式接收來自外界的 JSON 資料,物件之各屬性內容以 KeyValuePair<string, string> 陣列儲存,序列化結果如下: { "modType" : [ { "Key" : "I" , "Value" : "獨立模組" }, { "Key" : "J" , "Value" : "聯合模組" } ], "source" : [ { "Key"...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 08-02-2017
  • 擴充方法參數傳入 dynamic 型別出錯

    呼叫擴充方法時傳入 dynamic 型別參數,發生以下錯誤: 'Blah' has no applicable method named 'ExtMethod' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method...
    公佈在 黑暗執行緒 (Weblog)Jeffrey 發表於 07-31-2017
第3頁,共28頁 (278個項目) < 上一頁 1 2 3 4 5 下一頁 > ... 最後一頁 »
Powered by Community Server (Non-Commercial Edition), by Telligent Systems