效能 (C# 和 Visual Basic)
「效能」(Performance) 一詞通常是指程式的執行速度。 有時候您可以在原始程式碼中藉由下列某些基本規則,以提高執行速度。 某些程式中,仔細地檢查程式碼及使用分析工具 (Profiler) 來確保程式碼能以最快速度執行,是很重要的。 在其他程式中,您不需要執行這種最佳化工作,因為程式碼會在其撰寫的可接受速度下執行。
當您針對效能進行測量及最佳化時,應遵詢下列一般方針:
首先從設定效能目標及測量程式的效能開始,以判斷您的程式碼在什麼時候不符合這些目標。
開始撰寫正確的程式碼,期間務必遵循良好的設計準則,並力求清楚表達目的。 只有在您判斷程式碼不符合效能目標時,才於之後進行最佳化。 針對效能進行最佳化後的程式碼通常會更難以閱讀及維護。 比較好的方式是撰寫較易讀、完整及可維護的程式碼,即使執行速度稍微慢於最佳化後的程式碼也沒關係。
如果您必須進行最佳化,請先從程式速度最慢的部分開始。 如果您判斷某個程式不符合效能目標,請找出可改善效能的位置,以及哪些效能問題是發生問題的主因。 對某個很少呼叫的方法進行最佳化,或是對執行速度未達 50 毫秒的方法 A 進行最佳化,而整個程式卻必須等待另一個執行緒上執行之方法 B 約 30 秒的時間,這些都是沒有意義的動作。
Boxing 和 Unboxing
在必須多次 Box 處理實值型別 (Value Type) 的情況下,例如在 System.Collections.ArrayList 等非泛型集合類別中,最好避免使用實值型別。 您可以使用泛型集合例如 System.Collections.Generic.List<T>,避免 Box 處理實值型別。 Box 和 Unbox 處理是大量耗用運算資源的處理序。 當實值型別經 Box 處理時,必須建立全新的物件。 這個過程需要的時間可能是簡單參考指派的 20 倍。 執行 Unbox 處理時,轉換處理序所需的時間可能是指派的四倍。 如需詳細資訊,請參閱 Boxing 和 Unboxing。
字串
當您串連許多字串變數時 (例如在緊密迴圈中),請使用 System.Text.StringBuilder 代替 C# + 運算子或 Visual Basic 的 串連運算子。 如需詳細資訊,請參閱 HOW TO:串連多個字串 (C# 程式設計手冊)和Visual Basic 中的串連運算子。
解構函式
您不應使用空的解構函式。 當類別包含解構函式時,會在 Finalize 佇列中建立一個項目。 當呼叫解構函式時,即會叫用記憶體回收行程處理佇列。 如果解構函式是空的,則只會導致效能損失。 如需詳細資訊,請參閱 解構函式 (C# 程式設計手冊)和物件存留期:物件的建立和終結 (Visual Basic)。
其他資源
記憶體回收行程的基本概念和效能提示 (英文)
.NET 應用程式的效能秘訣和訣竅 (英文)
Rico Mariani 的效能趣聞 (英文)