程式碼的最佳化 – 效能調校

大師談-遊戲程式設計

資料參考自《大師談-遊戲程式設計-核心技術與演算法》一書的附錄A。

如何分析效能

  • 程式碼執行所花的時間:
    使用getTimer()函式(該程式語言中類似的函式)取得系統的即時時間(real-time clock),在待測程式碼執行前先取得時間t0,再於執行後取得時間t1,然後t1-t0即可得該程式碼的執行時間。
  • 消耗的記憶體:
    和時間的做法相同,只是改成取得系統的可用記憶體,在程式碼執行前後各取一次,然後相減即可。

偵測瓶頸

  • 造成系統變慢的程式碼(或元件)叫做瓶頸。
  • 把時間花在解決瓶頸上,而不要花在已經很完美的程式碼上,善用80/20法則,花大部份的精神去修改造成系統嚴重低落的程式碼,這將會讓系統的效能大幅度的提升。

如何最佳化

  • 問題出在迴圈上,而非線性程式碼片段。
  • 預先計算所有東西,然後將它儲存成表格來查詢。
    例如:如果程式中需要不斷地取得sin的值,可以先將需要的值計算後儲存起來,之後只要用查表的方式而非計算的方式來取得其值,將可降低CPU的計算時間。
  • 簡化數學計算。
    運算速度為:加、減 > 乘 > 除。(除法最慢)所以,除以2可以改為乘0.5來代替。
  • 簡化運算式。
    減少一個乘或除都好。
  • 有效地儲存資料。
    使用不必要的精確度會增加記憶體需求。

需要注意效能的部份

  • 應用程式本身的程式碼(邏輯、資料結構、演算法)
  • 資料傳輸
  • 圖形運算及螢幕掃描(遊戲)
  • SQL語法(資料庫)

謹記

過早最佳化是所有錯誤的源頭
本文網址:http://blog.tonycube.com/2009/10/1.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。