我處於一種情況,我有具有虛函數Update()的遊戲對象。有很多遊戲對象(目前有7000多個),循環調用所有的遊戲對象(除其他外)。我的同事建議我們應該完全刪除虛擬功能。正如你可以想象的,這將需要大量的重構。在一個緊密的循環中虛擬函數的成本
我見過this answer但在我的情況下,分析意味着我必須更改很多代碼。所以,在我甚至想到開始之前,我想我會問在這裏詢問重構是否值得在這種情況下。
請注意,我已經分析了循環的其他部分,並試圖優化耗時最長的部分。我懷疑這種情況下的虛函數調用是我不應該擔心的事情,但直到我更改代碼(這是很多)之前我無法確定。還要注意一些更新函數非常小,而其他更大更復雜。
編輯:有多種答案可以提供很好的洞察力,所以任何在將來遇到這個問題的人都會看到所有的答案,而不僅僅是選定的答案。
從您提供的信息看來,重構可能很困難或不可能。原因是有幾種不同的Update()函數。重構所得到的結果是,虛擬函數調用將被switch-case或if語句所取代,這在性能上並沒有更好的表現。 – tp1
怎麼敢有人問關於優化的任何事情! :P ...像往常一樣,這些類型的問題-1沒有解釋爲什麼。無論如何,感謝所有回覆的人。我需要的是另一個意見,我得到了。不知道爲什麼有些人會埋頭埋葬一切,甚至有什麼甚至有'優化'這個詞 – Samaursa
同樣在這裏。我正在開發自己的遊戲引擎,目前在線機器上運行速度約爲10fps。不知道去哪裏看,但我不敢問。在我的引擎中,我使用了兩個列表,一個用於所有對象(其數量超過我係統中的活動對象 - 衝突不會使對象處於活動狀態),另一個用於活動對象。 – dascandy