對於音遊來說,一場對局如果有卡頓的話,可能會直接影響到比賽成績,本來可以拿第一名的,結果因為卡頓掉到了第二名,甚至更低名次。卡頓對於音遊,moba等很多態別來講,都是很影響體驗的,甚至是很致命的,因為這直接關乎留存率。其中gc是最常見、最普通的卡頓,也是比較難搞的。由於unity-mono目前還是使用的保守式垃圾**演算法,所以每次gc都是stw方式,動輒200ms以上,一幀150ms就已經有很明顯的卡頓。解決gc的思路是盡量避免局內臨時分配記憶體,但是乙個複雜的對局,它的遊戲邏輯,用到的模組也是相當龐雜的,很難做到完全不分配記憶體,所以只能砍掉問題比較大且比較好弄的部分,這樣才能做到有的放矢,提公升優化效率。但是unity的profiler工具只能顯示299幀的資料,而且這個資料還不能儲存,也就是說如果用unity自帶的profiler工具來搞gc問題,只會把自己侷限在對某幀的分析上,gc問題是記憶體分配問題,記憶體分配是乙個疊加的過程,需要從乙個巨集觀的角度去分析解決這個問題,最直白的,就是需要拿到整場對局的記憶體分配資料。unity asset store上倒是有類似的工具,不過感覺都不夠定製化,且收費過高,都在25美元以上,感覺很不值。我自己寫了個幀分析工具,配合插樁,可以將整場對局的幀profiler資料儲存下來,有了這個資料,就能對各種問題做統計了。我做了一些實用性的功能:統計各項棧頂記憶體分配總計,統計呼叫棧中每項記憶體分配總計,統計gc觸發次數,已經在哪幾幀出現的,等等。下面列下一些ui:
工具功能視窗:
gc統計:
alloc統計(overview):
alloc統計2(呼叫棧):
遊戲抓幀分析工具及方法
nvidia出品的nvidia nsight graphics,用於pc平台下進行抓幀以及圖形效能分析 intel出品的gpa graphics performance analyzers,用於pc平台下進行抓幀以及圖形效能分析 unity引擎中自帶的frame debugger,用於使用unity...
自用組幀工具
coding utf 8 button button 莊稼?l blind little blind 小盲注 b blind big blind 小盲注 seat seat hold hold 手牌 ask ask first first 第一次發三張牌 turn turn 轉牌 river riv...
自用組幀工具
coding utf 8 button button 莊稼?l blind little blind 小盲注 b blind big blind 小盲注 seat seat hold hold 手牌 ask ask first first 第一次發三張牌 turn turn 轉牌 river riv...