資料參考自《大師談-遊戲程式設計-核心技術與演算法》一書的附錄A。
如何分析效能
- 程式碼執行所花的時間:
使用getTimer()函式(該程式語言中類似的函式)取得系統的即時時間(real-time clock),在待測程式碼執行前先取得時間t0,再於執行後取得時間t1,然後t1-t0即可得該程式碼的執行時間。 - 消耗的記憶體:
和時間的做法相同,只是改成取得系統的可用記憶體,在程式碼執行前後各取一次,然後相減即可。
偵測瓶頸
- 造成系統變慢的程式碼(或元件)叫做瓶頸。
- 把時間花在解決瓶頸上,而不要花在已經很完美的程式碼上,善用80/20法則,花大部份的精神去修改造成系統嚴重低落的程式碼,這將會讓系統的效能大幅度的提升。
如何最佳化
- 問題出在迴圈上,而非線性程式碼片段。
- 預先計算所有東西,然後將它儲存成表格來查詢。
例如:如果程式中需要不斷地取得sin的值,可以先將需要的值計算後儲存起來,之後只要用查表的方式而非計算的方式來取得其值,將可降低CPU的計算時間。 - 簡化數學計算。
運算速度為:加、減 > 乘 > 除。(除法最慢)所以,除以2可以改為乘0.5來代替。 - 簡化運算式。
減少一個乘或除都好。 - 有效地儲存資料。
使用不必要的精確度會增加記憶體需求。
需要注意效能的部份
- 應用程式本身的程式碼(邏輯、資料結構、演算法)
- 資料傳輸
- 圖形運算及螢幕掃描(遊戲)
- SQL語法(資料庫)
謹記
過早最佳化是所有錯誤的源頭
我要留言
留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。