多線程統計 | GOT Online新功能上線

爲了能大幅度降低主線程的壓力,提升項目的運行幀率,我們更傾向於將與Unity API無關的操作放到子線程中進行處理。但是,在分析堆內存佔用時,由於無法獲取子線程的堆內存分配具體情況,定位分析時就存在一定門檻。

爲了解決這個問題,我們在優化利器GOT Online的Mono模式中支持了多線程統計,配合GOT Online本身靈活使用、隨改隨測的特性,幫助大家更加快速地提升性能。下面是該功能的詳細介紹。

當我們使用子線程並在其中分配堆內存時,比如下圖中的組件,在Start中開啓了兩個子線程,並間歇性地分配堆內存:

這種情況下,Unity的Profiler中無法檢測到這部分的GC.Alloc,但這部分依然需要我們關注,本質上其與主線程上的GC.Alloc是相同的:頻繁分配會導致GC.Collect的調用,引用釋放不合理會導致堆內存泄漏。

現在,通過使用 GOT Online的Mono模式進行測試,可以在測評報告的“具體堆內存分配”頁面中看到前綴爲“Thread”的函數,這表示這些函數是在“非主線程”中被調用並且進行了堆內存分配。點擊某一函數後,即可看到該函數的堆內存分配細節,下圖則爲上述子線程調用代碼的堆內存分配統計。

 

同時,如果這部分堆內存被引用而無法通過GC釋放,可以在“堆內存泄漏分析”面板的對應函數中看到這部分堆內存增長情況,也可通過選中其中兩節點進行比較,如下圖所示。

 

點擊右側的藍色按鈕後,即可看到對應的堆內存對象類型,及其堆內存分配大小和數量。

說明:該功能目前支持2.3.0及以後版本的SDK,建議大家在UWA官網下載最新版本,體驗最完整的功能。

還不瞭解 GOT Online這個黑科技?

一分鐘瞭解它!

性能黑榜相關閱讀

《那些年給性能埋過的坑,你跳了嗎?》
《那些年給性能埋過的坑,你跳了嗎?(第二彈)》
《掌握了這些規則,你已經戰勝了80%的對手!》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章