2013-07-20 73 views
2

首先,我找不到這個問題,所以我決定在這裏發帖。應該重寫代碼還是應該使用方法?

在玩遊戲時,我意識到我在比賽場上擁有的實體越多,fps下降越多,這是預期的。

爲了優化它,我讀了一些地方(如果我能找到它,我會發布鏈接),如果你重寫代碼而不是使用通用方法,它會更快,因爲它不必「鏈接」方法每次運行代碼。但是,由於我正在重寫代碼,它可能會佔用更多的虛擬空間。

我只是想知道你的意見,如果你認爲這是真的。 我很樂意接受任何其他優化策略或鏈接。

編輯:選擇答案後,如何讓問題「過於寬泛」有什麼意義?如果選擇則意味着答案有一個有效的答案,這意味着該問題是不是太廣,否則answerneers將不得不問題...

感謝

+4

重寫可能會使情況變得更糟,只是嘗試查看是否可以重構代碼以提高效率,儘可能減少循環 – Sayse

+2

對於-1'ed的人:感謝-1'ing,這確實有所幫助。 @Sayse好吧,我將會有循環,其實很多,因爲我必須在遊戲區域處理實體(只有屏幕上的實體,atm)。我會嘗試重構,看看是否有幫助。 – Dave

+1

我在類似的項目中做了什麼是定義一個接口,我所有不同的實體都可以使用,然後所有的更新都可以從一個循環的foreach完成(我的obj中的IInterface obj)obj.Update()' – Sayse

回答

6

而不是試圖猜測是在應用程序中佔用CPU時,應考慮分析應用程序的性能特徵。這可以幫助您找到消耗大部分CPU時間的代碼部分。找到代碼中佔用CPU最多的部分,進行相應的調整,以提高代碼的性能,然後再次運行性能分析器。一旦你做出改變,分析儀報告的性能特徵就會發生相當大的變化。如果您無法再優化最重的零件,請繼續下一個最重的零件。

1

曾幾何時,當你有一個單核CPU的時候,它的運行速度是100Mhz,那麼查找一個函數調用並跳到這個內存位置來運行該方法,然後跳回在完成時加起來 - 特別是當你有很多小方法,或者一個被稱爲很多的單一方法時。

因此,他們發明了編譯器的內聯功能,通過將這些小函數直接複製到代碼中來自動優化代碼 - 所以您可以從編寫方法中獲益,編譯器會修復這些問題,使其仍然像您寫的那樣執行這一切都使用一個大的方法。但是那是當今,當你有8個核心電話以幾Ghz運行並且流水線化和大量優化編譯器時,方法調用的代價是微不足道的。您將有其他問題導致性能問題。你會。

今天最常見的原因是內存複製,因爲CPU速度非常快,需要穩定的數據流才能使用,而當你必須停下來從別的地方獲取一塊內存時,成本。當你使用C#時,下一步就是看你的對象創建 - 就像Stringbuffer被創造出來的那樣,如果你分配了很多很多很多的對象,你就會發現它很慢。

但仍然,我猜 - 你的問題可能在其他地方,所以看!找出性能問題在哪裏,並解決它們。

相關問題