2011-08-03 37 views
4

在分析iPhone 3G上的iOS遊戲時,樂器報告說系統調用pthread_setspecific(從許多看似無關的位置調用)是最大的CPU瓶頸。谷歌告訴我,這涉及到爲線程存儲元數據,但是我不確定如何跟蹤這個問題,因爲整個引擎是單線程的。這是否與CADisplayLink有關?我可以優化特定場景以更好地解決這個問題嗎?iPhone遊戲CPU分析和pthread_setspecific

這裏是一個可以在回答我的問題是有幫助的一些相關信息:

  • 設備:iPhone 3G
  • 的iOS版本:4.2.1
  • 遊戲代碼完全是C++,在應用層OBJ-C。
  • 遊戲使用OpenglES1.1
  • 不幸的是RTTI和C++異常都是必需的,因此啓用。
  • 這是通過儀器中的CoreAnimation分析器運行發佈版本(帶有調試符號)。
+0

就「自我時間」而言,它可能會使用得最多。你需要知道哪些例程正在調用它,哪些正在調用_those_,等等。任何基本上只是調用系統函數的程序都會看起來像這樣。 –

+0

@Mike沒有直接調用它,但是如果我查看分析信息,它會從很多看似隨機的地方(如單例實例方法)調用。它可能是gcc/iOS爲函數調用添加的東西,或者它與切換線程上下文有關?對不起,我對線程不是很熟悉。 :/ – grahamp

+0

是的,這是一些配置文件給你的廢話。這就是爲什麼[我使用這種方法](http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024)。如果它在這個例程中花費了足夠的時間來關心,那麼你會在那裏捕捉它,然後你就會明白爲什麼它被調用。 –

回答

2

異常處理生成的代碼使用線程本地存儲來存儲其展開堆棧。沒有什麼可以輕鬆做到的。嘗試在可能的情況下移除異常。無需編譯部分代碼。