前言
最近做的手游项目(Unity+tolua架构)快接近尾声了,功能差不多齐备之后开始对各种技术指标进行优化。Unity自带的Profiler能对C#的Cpu和内存使用状况进行比较好的分析,但是无法涵盖lua部分,很多人可能跟我一样,对lua部分的优化觉得无从下手。本人在网上搜了很多工具之后发现了这个很实用的工具,能够对内存消耗情况和lua和mono的GC进行很好的监测,废话不多说,一起来看。
下载链接
https://github.com/ElPsyCongree/LuaProfiler-For-Unity
安装流程
Lua profiler支持XLua,Slua, ToLua以及一个远程工具支持Windows,Android, iOS真机调试
1.下载完成之后会看到LuaProfilerClient和LuaProfilerServer两个文件夹,你需要两个Unity工程,将Client文件夹拷进你的游戏工程的Assets目录,也就是根目录下(如果你的Lua 脚本在Plugins 文件夹,把LuaProfilerClient拷到Plugins下)
2. 用Unity 5.6或者更新的Unity版本创建一个空的工程,把LuaProfilerServer 拷进根目录里。如果你的版本低于5, 请在启动游戏时加入如下代码
MikuLuaProfiler.HookLuaSetup.OnStartGame();
3.在你的游戏工程,也就是放了LuaProfilerClient的工程下,在Windows菜单拦下会多出一个Lua Profiler Window的选项。打开之后出现这个
如果你在PC上测试,就按照图中的设置即可
4.接下来打开LuaProfilerServer 所在的工程,该工程就是观测内存的地方。也在Window -> Lua Profiler Window下打开Lua Profiler窗口,端口和Client里配置的保持一致便可以点击OpenService
控制台出现如下log说明Server已经开始等待Client的连接
5.这时就可以启动你的游戏工程了,Client显示如下,Server的Lua profiler出现数据说明已经连接成功。
Android手机真机调试(usb连接方式)
打包的时候ip地址填入 127.0.0.1 port:填入2333
在Player Settings里加上宏:USE_LUA_PROFILER
注意:不要编译 lua代码。
用usb线连接电脑和手机
命令行里执行
adb reverse tcp:2333 tcp:2333
原理是把手机的本地端口 映射为pc的 端口
先在pc的server工程里 OpenSerive, 再打开手机APP
功能介绍
参数说明
按照Lua Profiler从左到右的顺序逐一说明
totalLuaMemory 该函数及其子方法总共使用的lua内存(如果函数执行过程中发生了GC,此值会有略微不准)
self 该函数自身总共使用的lua内存,如果出现负值,是其子方法调用了GC
totalMonoMemory 该函数及其调用总共使用的Mono内存(如果函数执行过程中发生了GC,此值会有略微不准)
self 该函数自身总共使用的mono内存,如果出现负值,是其子方法调用了GC
currentTime 在当前帧下此调用该函数所用时间
averageTime 该函数的平均调用时间
totalTime 该函数总共的耗时
LuaGC 在当前帧下该函数产生的Lua GC
MonoGC 在当前帧下该函数产生的Mono GC
totalCalls 从游戏开始时该函数的调用计数
Calls 当前帧下该函数调用的次数
录制模式
录制模式能对一段时间里的内存使用情况进行逐帧的监测
点击Record按钮,再点击StartRecord按钮进入录制模式。再次点击StartRecord按钮会结束录制,此时可以对内存情况进行逐帧的查看,很类似Unity的Profiler的操作。
结语
优化的重点关注几个地方,
内存上涨的特别快的函数
产生Lua GC的函数
时长消耗比较长的函数,averageTime等指标
本文只是入门教程,我觉得已经足以解决很多基础的内存问题。如果有更多的问题,可以加QQ群:882425563 一起讨论
延伸阅读
https://www.zhihu.com/question/307064711/answer/570257565 工具作者ElPsyCongree写的关于性能检测文章
http://www.gamasutra.com/blogs/WendelinReich/20131109/203841/C_Memory_Management_for_Unity_Developers_part_1_of_3.php C# for Unity内存管理的三篇文章
https://docs.unity3d.com/Manual/UnderstandingAutomaticMemoryManagement.html Unity官网对内存管理的一些建议
————————————————
版权声明:本文为CSDN博主「大龄美飘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanna_ku/article/details/87535606