最近 IL Code 寫得比較多,主要是在練習,目的是希望自己將來遇到效能議題的時候,還有招數可以施展,剛開始練習寫 IL Code 的時候,是先從存取一個 instance 的公開或私有的屬性及欄位開始,這讓我想到一個套件 - FastMember,作者已經至少有 2 年沒有更新了,既然會一點 IL Code,那我能不能弄一套屬於自己的 Chef.FastMember
呢?
[創意料理] 用 IL Code 來做一個簡易版本的 FastMember
- 56
- C#
最近 IL Code 寫得比較多,主要是在練習,目的是希望自己將來遇到效能議題的時候,還有招數可以施展,剛開始練習寫 IL Code 的時候,是先從存取一個 instance 的公開或私有的屬性及欄位開始,這讓我想到一個套件 - FastMember,作者已經至少有 2 年沒有更新了,既然會一點 IL Code,那我能不能弄一套屬於自己的 Chef.FastMember
呢?
LocalDB 是許多開發人員很喜歡的一個功能,但 SQL Server 2019 的 LocalDB 安裝起來卻可能會遇到問題....
在 node.js 中不支持 big5 解碼,因此當筆者透過 axios 呼叫 charset 為 big5 的 response 資料時,仍會以 utf8 編碼解析而產生亂碼。
在先前的文章有提到過「在執行時期憑空捏造一個組件」這件事,我是用在自己打造的 Library 之中,而做這件事的最主要目的是在執行時期產生一個類別,用來產生使用端類別的替身,或是用來做一些特殊的識別,我們就來看一下,要在執行時期產生一個類別,需要做哪些事情?
從版控取回代碼後如何重建 platform 及 plugin 環境。
加入 cordova-plugin-qrscanner 插件呼叫 iOS 原生 API 來開啟鏡頭掃描 QR Code。
上一篇文章有提到學著讀或寫 IL Code,對我們在程式執行狀況的掌握,有正向的提昇,那麼其中一種學習方式,就是透過我們平常撰寫的程式碼,看看它編譯出來的 IL Code 長什麼樣子,藉此來理解 IL Code,本篇文章就來介紹兩種查看 C# 編譯出來的 IL Code 的方式。
使用 Vue 與 Cordova 進行 app 開發,並且部署到虛擬器及實體手機進行測試。
程式寫多了,我們多多少少會開發一些 Library 來輔助我們讓程式寫起來更方便一些,這些 Library 通常都獨立於專案之外,除了使用上的彈性之外,還有一個我們會關注的大概就是效能了,既然提到了效能,我們腦海中閃過的解決方案應該會有「撰寫 IL Code
」這個選項,IL Code 雖然可讀性極差,但是如果我們有能力可以讀得懂,甚至使用 IL Code 撰寫程式的話,對我們在程式執行狀況的掌握,絕對有正向的提昇。
我就用 IL Code 撰寫一段將值指派給私有欄位的程式來當個起頭,之後如果還有遇到 IL Code 可以發揮的地方,我也會儘量整理成文章分享給大家。
最常見的依賴注入(Dependency Injection)方式,就是從建構式上面,將依賴的服務一一注入,但是實務上多多少少會有一部分的 Instances,在服務被釋放之前都沒有被用到,雖然一般來說,產生 Instance 的成本不大,不過我還是想試一下,能不能將依賴注入這件事移到執行的目標方法裡面,在方法裡面有用到的服務才注入,所以就有了「延遲依賴注入(Lazy Dependency Injection)
」這個題目。
在 .NET Framework 中,無論是 App.Config
或 Web.Config
,均有保留 <configSections>
讓我們可以自訂設定區塊(ConfigurationSection
),由於曾經看過有一些 Library 把設定值放在節點之中,像這樣:
等到要自己弄的時候才發現,似乎沒有那麼簡單,網路上搜尋到的有關於自訂 ConfigurationSection 的文章,大都沒有提到這一塊。
利用 Azure SQL PM team 所製作的檢測語法,找出 Azure SQL Database 可改善之處
Windows Forms 的 DataGridView 開啟編輯資料之後,我們就可以在畫面上直接對資料進行修改,預設的統一操作行為是修改完資料之後,按下 Enter 鍵或是離開該儲存格,資料就會更新到綁定的 DataSource 上,就像下面這樣:
但是呢,使用者會希望能在修改之後立即更新到 DataSource,不要再多敲 Enter 鍵或離開儲存格的動作,尤其是 ComboBox,我們來看一下怎麼弄?
利用 Microsoft Connector for Oracle 輕鬆連接 Oracle 資料庫
如果我們的 Data Source 是非同步更新的話,那麼我們就很容易收到下面的錯誤訊息。
跨執行緒作業無效: 存取控制項 'xxx' 時所使用的執行緒與建立控制項的執行緒不同。(Cross-thread operation not valid: Control 'xxx' accessed from a thread other than the thread it was created on.)
一般遇到這個情況,我們通常就是判斷 Control.InvokeRequired
屬性,然後改用 Control.Invoke()
或 Control.BeginInvoke()
方法來修改控制項的屬性,如果是在有資料綁定的情況呢?怎麼解決這個跨執行緒的問題?
習慣寫 ControlTemplate 的朋友應該都滿習於使用 TemplateBinding,但是 TemplateBinding 有某些限制導致無法使用在 Trigger 中,本篇用個簡單的範例來說明如何解決類似的問題。
在 Windows Forms 當中,只要是繼承自 Control 的控制項,都有實作 IBindableComponent 這個介面,都具有資料綁定的能力,但是有一些控制項就沒有,例如:ToolStripStatusLabel,不過也不是不能做資料綁定,加給它就好了。
日前在Tunning一句語法時,在SSMS的視窗下撰寫TSQL測試。當時發現我用變數當參數來查跟直接用數字來當參數查時會跑不同的執行計畫,Code的範例如下
要在一支既有的 Windows Forms(Windows 視窗程式)上,增加一個 TextBox 控制項,它有一個特殊的需求,就是在 TextBox 修改的文字不能與綁定的 DataMember 連動,簡單來說,就是做單向綁定(One-Way Binding)
。
使用 Cytoscape.js 實現廠房機台地圖繪製功能