效能警告
效能警告會支援高效能的程式庫和應用程式。
在本節中
規則 |
描述 |
---|---|
重複轉型會降低效能,尤其是在精簡型態的反覆運算陳述式中執行轉型時。 |
|
方法簽章包括不用於方法主體中的參數; |
|
欄位宣告為 static 和 read-only (在 Visual Basic 中為 Shared 和 ReadOnly),並使用編譯時期能計算的值進行初始化。因為指派給目標欄位的值可在編譯時期進行計算,所以將宣告變更為 const (在 Visual Basic 中為 Const) 欄位,其值便可於編譯時期進行計算,而不是在執行階段計算。 |
|
未使用的區域變數和不必要的設定,會增加組件的大小並降低效能。 |
|
已建立但從未使用新物件、已呼叫會建立並傳回新字串的方法,而新字串從未使用過,或者元件物件模型 (COM) 或 P/Invoke 方法傳回從未使用的 HRESULT 或錯誤碼。 |
|
常見的效能最佳化作法是在處理器暫存器中儲存值,而非記憶體,這稱為「註冊 (Enregistering) 值」。若要增加所有區域變數都能註冊的機率,請將區域變數的數目限制為 64。 |
|
當型別宣告明確的靜態建構函式時,Just-In-Time (JIT) 編譯器會將檢查加入至型別的每個靜態方法和執行個體建構函式,確保之前已呼叫該靜態建構函式。靜態建構函式檢查會降低效能。 |
|
private 或 internal (組件層級) 成員在組件中沒有呼叫端,不會由 Common Language Runtime 叫用,而且委派也未叫用該成員。 |
|
組件層級型別的執行個體不是由組件中的程式碼所建立。 |
|
.NET Framework Class Library 會提供擷取自訂屬性的方法。根據預設,這些方法會搜尋屬性繼承階層架構。密封屬性會減少對整個繼承階層架構的搜尋,並且可以改進效能。 |
|
不規則陣列是一種陣列,其元素也是陣列。組成元素的陣列大小可能不相同,因此對於某些資料集而言較不會浪費空間。 |
|
對於實值型別而言,Equals 的繼承實作會使用 Reflection 程式庫,並比較所有欄位的內容。但是 Reflection 相當耗費運算資源,而且可能不需要比較每個欄位是否相等。如果希望使用者比較或排序執行個體,或是使用執行個體做為雜湊資料表索引鍵,則您的實值型別應實作 Equals。 |
|
屬於 Dispose 實作的方法不會呼叫 GC.SuppressFinalize,或不屬於 Dispose 實作的方法會呼叫 GC.SuppressFinalize,或呼叫 GC.SuppressFinalize 並傳遞非 this (在 Visual Basic 中為 Me) 的方法。 |
|
即使屬性是唯讀,所傳回的陣列不會是寫入保護。若要保持陣列為防止遭他人修改,屬性必須傳回陣列複本。一般而言,使用者不了解呼叫這類屬性所造成的不良效能影響。 |
|
使用 String.Length 屬性或 String.IsNullOrEmpty 方法比較字串,明顯地會比使用 Equals 還快。 |
|
請盡可能避免使用完成項,因為追蹤物件存留期 (Lifetime) 時將會產生額外的效能負荷。空白完成項只會增加額外負荷,而沒有任何好處。 |
|
不會存取執行個體資料或不會呼叫執行個體方法的成員,可以標記為 static (在 Visual Basic 中為 Shared)。將方法標記為 static 之後,編譯器將對這些成員發出非虛擬呼叫位置。這麼做可以讓重視效能的程式碼獲得可觀的效能。 |
|
偵測到似乎不能在組件內存取的私用欄位。 |
|
NeutralResourcesLanguage 屬性 (Attribute) 會告知 ResourceManager,用來顯示組件之中性文化特性 (Culture) 資源的語言。這可改善載入第一個資源的查詢效能,而且可以減少您的工作集。 |