跳去內容

軟件最佳化

出自維基百科,自由嘅百科全書
  提示:呢篇文講嘅唔係數學最佳化

軟件最佳化英文optimisation ),官話化啲嘅又叫軟件優化,指將軟件改到更加有效率,等系統行起上嚟唔洗佔用咁多資源。簡單例子有檢查隻軟件嘅源碼,確保段嘢完全冇任何多餘嘅碼:想像依家編寫網上遊戲程式,隻遊戲好受歡迎,有數以十萬計嘅玩家;若果程式嘅源碼當中有一行多餘嘅碼,噉十萬幾位玩家玩起上嚟部伺服器就要行多十萬幾行多餘嘅碼,於是就可能會搞到伺服器嘅負責大咗好多。因此,最佳化喺實際嘅軟件工程工作上相當受重視[1]

微最佳化英文micro-optimisation )係指喺程式嘅底層做細微嘅改動,達致最佳化嘅效果。

要學軟件最佳化,一般要識咗電腦程式編寫嗰啲基礎概念先。

基礎概念

[編輯]

軟件最佳化係軟件工程上嘅重要工序:軟件泛指用嚟做某啲特定功能電腦程式,例如電子遊戲就係用嚟做娛樂用途嘅軟件,畀用家遊戲;單憑日常觀察可知,部電腦要行電腦程式,梗要或多或少花費時間同埋記憶體,而事實表明,編程員寫程式嗰陣用嘅手法,會影響個程式要行幾耐先行得完(睇埋編譯期執行期等嘅概念)或者程式要使用幾多記憶體[2][3]

舉個簡單例子,依家想寫個程式,程式要攞個數 a 做 inputoutput 出晒所有

細過或者等如 a、又係 10 嘅倍數

嘅數,即係[4]

如果 input 係 200,就要出 200, 190, 180, 170, 160,... 噉嘅一列數;
如果 input 係 150,就要出 150, 140, 130, 120, 110,... 噉嘅一列數;

想像下面依段虛擬碼

 a = 200; # 設 a 做 200
 while (a > 0)  # 可以睇埋 while 迴圈嘅概念。
 {
   b = 10;
   if (a % b == 0} # 如果 a 係 b 嘅倍數,print a 出嚟睇。
     print(a);
   a -= 1; # a 數值下降 1
 }

上面段碼查實唔係咁有效率b = 10 呢個步驟唔洗喺個 while 迴圈每個圈都行一次,而由於段碼有不必要嘅步驟,就搞到段碼行起上嚟慢咗。上面段碼可以改做:

 a = 200;
 b = 10;
 while (a > 0) 
 {  
   if (a % b == 0} 
     print(a);
   a -= 1;
 }

b = 10 呢個步驟就變成淨係做一次咁多,令到段碼效率高咗。軟件最佳化指緊嘅就係[2]:p. 1[5]

要減少程式消耗嘅資源量,當中資源量包括-
  • 碼嘅hong4數、
  • 行起上嚟花嘅時間,
  • 行起上嚟花嘅記憶體量,

同時 keepkip1 住個程式功能唔變

上面呢個例子相當簡單。就算做咗最佳化,齋靠肉眼睇唔覺佢行得快咗。但係專業軟件工程上整嗰啲軟件,閒閒哋成幾萬行碼咁長,有啲甚至仲有成上億行碼[6]。對於噉嘅軟件嚟講,如果佢哋每 50 行碼就要嘥多 10 毫秒嚟行,已經會對佢實際用嗰陣嘅表現造成具體影響。因為噉,專業嘅軟件工程師都會關注最佳化,會諗好多技巧想令啲程式更有效率。

層面

[編輯]

演算法

[編輯]
睇埋:窮舉搜尋

源碼

[編輯]

技巧

[編輯]

物件池模式:屬於設計模式一種,講緊初始化嘅時候建立一拃物件實例,形成所謂嘅物件池,等到個程式行起上嚟要用嗰時,就攞嗰啲物件嚟用,用完就將件物件掟返去物件池裡便;呢種做法,相對於喺個程式行嗰陣建立同毀滅物件—建立同毀滅物件係相當花資源嘅,用咗物件池就有助達致最佳化[7]

缺點

[編輯]

最佳化好多時會令個程式嘅可讀度下跌

睇埋

[編輯]

文獻

[編輯]

  • Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.

引述

[編輯]
  1. Wadleigh, K. R., & Crawford, I. L. (2000). Software optimization for high-performance computing. Prentice Hall Professional.
  2. 2.0 2.1 Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
  3. Lowry, E. S., & Medlock, C. W. (1969). Object code optimization (PDF). Communications of the ACM, 12(1), 13-22.
  4. Code Optimization in Compiler Design. GeeksForGeeks. 1. Code Motion or Frequency Reduction, Example.
  5. Performance Optimization in Software Development. Medium.
  6. 5 Most Complex Software Ever 互聯網檔案館歸檔,歸檔日期2022年10月8號,.. JavaScript in Plain English.
  7. COM+ Object Pooling Concepts

[編輯]