前言
toLua Framework是一款开源的Unity+toLua热更新框架,越来越多的游戏项目将其应用于热更新开发,但这样会形成了Lua+Mono双GC系统,而有的开发人员优化时往往只针对Mono层的优化而忽略Lua层的性能问题,或者没有类似于Unity Profiler这样高效直观的优化工具,又或者认为Lua拥有类似于C#的垃圾自动回收机制而不必优化。其实,Lua使用不规范也会造成灾难性的性能问题。
例图:Unity Profiler只能追踪到C#层与Lua层的交互代码块,而无法具体分析Lua层
性能问题
- Lua层大量内存分配会导致频繁的LuaGC从而造成卡顿,这一点跟C#一样。
- C#和Lua频繁地互相调用存在性能损耗。
- Lua对象如果是全局变量会直接放在_G中,LuaGC无法清除。
- Lua对象被一些全局的Table引用,LuaGC无法清除。
- C#和Lua的互相引用,使用完未处理导致引用依然存在然后都GC不掉的情况,如Lua对象的function字段被赋值给了C#的事件/委托。
- Lua层配置表内存占用过大。
参考资料:
https://www.jianshu.com/p/19f03570a117