多线程统计 | GOT Online新功能上线

多线程统计 | 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%的对手!》