Share via


效能 (C# 程式設計手冊)

更新: 2008 年 7 月

「效能」(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# 的 + 運算子。如需詳細資訊,請參閱 HOW TO:串連多個字串 (C# 程式設計手冊)

解構函式

您不應使用空的解構函式。當類別包含解構函式時,會在 Finalize 佇列中建立一個項目。當呼叫解構函式時,即會叫用記憶體回收行程處理佇列。如果解構函式是空的,則只會導致效能損失。如需詳細資訊,請參閱解構函式

其他資源

請參閱

概念

C# 程式設計手冊

參考

安全性 (C# 程式設計手冊)

變更記錄

日期

記錄

原因

2008 年 7 月

加入 Boxing 和 Unboxing 一節的資訊。

資訊加強。

2008 年 7 月

加入有關字串的章節。

資訊加強。

2008 年 7 月

加入簡介資訊。

資訊加強。