UWA 新功能| 多线程模式下也能定位堆内存问题了!
来源:互联网 发布:nginx配置多个server 编辑:程序博客网 时间:2024/06/05 19:25
原文链接:https://blog.uwa4d.com/archives/1887.html
UWA 线上性能评测又推出新功能啦,Mono堆内存分析支持多线程统计!今天,我们在介绍该功能的使用方法之前,将详述其研发背景,即我们为什么要研发该功能,并通过实例结果加以说明,希望能加深大家对引擎的理解。
一、功能研发背景
随着大家研发项目的复杂度逐渐增高,我们发现越来越多的项目开始将一些与Unity API无关的操作放到子线程中进行处理,比如文件的读取、解压和解密等操作,网络信息的收发操作,甚至一些自定义功能的逻辑操作等。这样做的好处显而易见,即:降低主线程的压力,同时提升项目的运行帧率。但是,它却给大家在堆内存分析时带来了新的“麻烦”—Mono的总体堆内存占用很高,但我们之前的性能报告或者Unity Profiler中却无法看到是哪个函数分配出来的。这是因为,子线程中的堆内存分配是抓取不到的。
二、实例说明
通常,如果在脚本中进行了堆内存分配,在Unity Profiler中可以在对应帧看到具体的分配大小。如下图中的代码,及对应的调用帧的信息。
然而,如果是在子线程中进行该操作,其所分配的堆内存在目前的Unity Profiler中则不会有显示。如下图中的代码,及对应的调用帧的信息。
可以看到对应的调用帧分配仅为276B,而堆内存的使用值在该帧前后,却增加了1MB,见下图。
以上这种情况是我们在研发团队中经常碰到的,对此,我们这几个月来对多线程的堆内存分配操作进行大量的试验和研究,并终于可以在今天向大家推出该功能。
三、子线程Mono堆内存分析功能
在最新的UWA线上性能测评的Mono堆内存分析功能中,对于在子线程中存在逻辑操作并产生堆内存的项目,可以在测评报告的“具体堆内存分配”页面中看到前缀为“Thread”的函数,这表示这些函数是在“非主线程”中被调用并且进行了堆内存分配,点击某一函数后,即可看到该函数的堆内存分配细节,下图则为上述子线程调用代码的堆内存分配统计。
同时,如果这部分堆内存被引用而无法通过GC释放时,还可以在“堆内存泄漏分析”面板的对应函数中看到这部分堆内存增长情况,如下图所示。
点击右侧的蓝色按钮后,即可看到对应的堆内存对象类型,及其堆内存分配大小和数量。
以上新功能目前仅在UWA线上测评版本中提供,欢迎大家的项目来体验。同时,我们后续会将其集成到本地性能测评工具UWA GOT中,敬请期待!
关于UWA的Mono堆内存分析功能,戳这里可以了解更多信息。
我不会告诉你堆内存泄漏可以自行搞定,不求人!
关于UWA
由侑虎科技开发的游戏/VR应用性能优化平台,目前提供 1)性能检测与优化 2)资源检测与分析 3)UWA GOT 三大工具。同时,我们也会为大家开发更省心的功能,希望通过它们可以减少开发者反复测试定位问题的时间,从而将更多的精力集中在项目开发和解决问题中。我们将以实力和态度诠释我们对性能优化的定义:解决你的性能问题,方为“优化”。
- UWA 新功能| 多线程模式下也能定位堆内存问题了!
- UWA 新功能 | 优化方法进阶—定位子函数的开销
- 定位多线程内存越界问题实践总结
- 定位多线程内存越界问题实践总结
- 定位多线程内存越界问题实践总结
- 定位多线程内存越界问题实践总结
- 定位多线程内存越界问题实践总结
- 定位多线程内存越界问题实践总结
- uwa内存占用
- [转]定位多线程内存越界问题实践总结
- 搞定这些问题,一个插件就够了!—UWA GOT 功能全剖析
- 8.10 直播回顾 | 一个小时内,我们用UWA GOT解决了这些问题...
- linux 内存问题定位
- valgrind定位内存问题
- 走下神坛的内存调试器--定位多线程内存越界问题实践总结
- 堆内存相关问题
- java多线程-cpu内存占用-定位分析
- java内存泄漏问题定位
- map对值排序
- 详解Web.XML文件
- ajax+jsp一些心得
- 每日工作记录——W5500网口ping中出现的问题
- LearnOpenGL #00 环境搭建 Xcode/GLEW/GLFW/GLAD
- UWA 新功能| 多线程模式下也能定位堆内存问题了!
- 惠安惠达新需求:增加起始里程和结束里程修改
- 偏向锁,轻量级锁与重量级锁的区别与膨胀
- CSS学习笔记(Day3)
- 单片机/ARM死机的常见原因及解决方案
- iOS
- ART加载OAT文件的分析
- Modbus 协议
- Eclipse建立Maven项目后无法建立src/main/java等资源文件夹的解决办法