[.Net concept]使用方法與屬性時適時為其值做快取
這是一個很簡單的小概念,沒甚麼難度,但卻常被開發人員忽略。這很概念理解並養成習慣後,能默默的為程式帶向較好的效能,避免在不自覺中踩中地雷,讓後續效能調校時要花更多的功夫,這邊筆者稍微的帶一下~順手紀錄一下。 ...
這是一個很簡單的小概念,沒甚麼難度,但卻常被開發人員忽略。這很概念理解並養成習慣後,能默默的為程式帶向較好的效能,避免在不自覺中踩中地雷,讓後續效能調校時要花更多的功夫,這邊筆者稍微的帶一下~順手紀錄一下。 ...
事件在.Net程式中算是滿常使用的,雖然很多人都已經會使用了,但就筆者的經驗來看,撰寫事件時有些良好的習慣往往被人給忽略。筆者相信越是簡單的東西越是難被一窺究竟,多半這些簡單的觀念都是淺嚐則止。有鑑於此,筆者將個人的使用經驗與個人的理解整理一下,筆記於此文。 ...
寫過.Net或是Java程式的開發人員,或多或少都曾聽過這些程式語言在處理字串時,底層會有個名為String pool的機制,幫我們自動重用已經建立的字串實體,減少記憶體的耗費。 ...
相信大家在開發時都曾注意到過在專案屬性頁面之中,有個跟位元有關的編譯設定,其預設值為Any CPU。 ...
彼此該為全雙工的物件不要讓它們半雙工,這概念主要是想表達,當今天開發的兩個類別以物件的角度來看,若應該能夠直接知道彼此的存在,且在開發上如此實現有其便利性時,應該讓它們透過成員變數,讓物件間可以很直接的互通。這概念通常在彼此間具有階層概念的情況下特別適用。 ...
記得在之前工作時跟其它部門的同仁做過一次程式的整合,所提供的組件需要指定一個委派,當組件有資料需要處理時會透過指定的委派告知,整合完後拿去給界面使用,卻意外的被處理界面的同事告知出現了跨執行緒作業無效的問題。原來在該組件中有開另一個執行緒去接收資料,收到資料後直接透過委派告知,我程式中委派的動作跟著被帶到另一個執行緒,間接產生了這個不被我注意到的問題。 ...
在撰寫程式時,最常撰寫的成員型態應該就屬集合與字串這兩種,很多開發人員對這兩種回傳型態的屬性與方法並未特別的注意,因兩種型態都是參考型態別,有時在實作上直接把null回傳出去。其實當回傳型態為這兩種型態時,我們應避免直接以null當作回傳的值,而是應該回傳空的字串或是空的集合。像是: class Person { #region Var private string _name; private IEnumerable creditCards; #endregion #region Property public string Name { get { if ( null) return string.Empty; return _name; } } public IEnumerable CreditCards { get { if (_creditCards == null) return new CreditCard[0]; return _creditCards; } } #endregion } 這是個很簡單卻也很重要的撰寫概念,若在撰寫時能遵照此概念,如此使用者不會混淆於哪些成員屬性與方法可能為null,在使用上也可直接用字串長度或是集合的元素數量直接判斷是否為空值,而不需事先判斷是否為null,因此程式撰寫會變得簡潔,可讀性跟著提升,間接的也減少了NullReferenceException發生的機率。 這概念在MSDN的陣列用法方針這篇也有提到 在.Net Framework中也隨處可見此概念的實現,稍有留心就能參透此概念。有興趣的可以嚐試看看.Net Framework BCL中的集合與字串型態成員是否都可以直接判斷空值,是否不需判斷是否為null。 ...
在例外處理時,有些情況下我們會需要將例外攔截後再次向外擴,在此時我們有兩種可選擇的寫法,一種是很多初學者會採用的透過throw ex來外擴例外,這種寫法須避免使用,因為採用此種寫法會改變的原來的呼叫堆疊,造成除錯上的困難。 try { // do something } catch (Exception ex) { // do something throw ex; } ...
相信大家都知道當在更新介面時,有的控制項會提供BeginUpdate/EndUpdate,甚至是BeginEdit/EndEdit、BeginInit/EndInit、SuspendLayout/ResumeLayout等暫停更新的方法,可用以加速介面的更新動作。像是ComboBox控制像就有這類方法: ComboBox1.BeginUpdate() For i As Integer = 1 To 10000 ComboBox1.Items.Add(i.ToString) Next ComboBox1.EndUpdate() ...
對於程式功能的啟用,我想多半一開始大家接觸到的寫法就是用個Flag去判斷功能是否啟用,如果啟用就做某些動作,這樣的程式多半會在主要的程式邏輯中加入If判斷,這樣的寫法雖然在Flag有設的狀態才會執行主要功能,但若Flag未設定,該If判斷多少也都會對其效能造成影響,而且會讓程式的邏輯與新功能的程式混在一起,變得不易理解。因此這邊記錄一下另一種寫法,純粹是個人的小小經驗,小小體會。 ...