Lua与C++的性能问题/卡顿问题。

我正在开发一款游戏,核心使用C++(SFML),角色脚本使用Lua。然而,我遇到了一些性能问题,不确定是什么原因。我创建了一个测试程序来展示我的问题。

基本上,有时当我从C++调用Lua函数时,它需要比平常长得多的时间才能返回。我需要我的游戏以60fps运行,大多数时候都会以这个速率运行,但偶尔一个或多个函数调用花费的时间会比平常多得多。

我的第一个想法是它可能是内存管理器的问题,但关闭内存管理器似乎没有消除这些问题。我知道有几个游戏使用Lua,我想象这对他们来说不是问题。

人们建议使用LuaJIT可以解决这个问题,所以我下载并设置了LuaJIT(带有lua 5.1)。平均时间显著得到改善,但峰值仍然存在:

enter image description here

2个控制台结果的画廊(以微秒为单位;参考60fps的帧的约为16700):

关闭垃圾回收 gc disabled 启用垃圾回收 gc enabled

C++测试程序-http://pastebin.com/RhYnnLm3

Lua测试脚本-http://pastebin.com/NBnAXcVD

点赞
用户101946
用户101946

似乎你遇到了 LUA 垃圾回收器在某些呼叫中的滚动。在游戏中,通常要非常注意 GC 的操作及其运行频率。一个简单的解决方案可能是每帧手动运行一次 GC。我知道一些流行的游戏引擎也是这样做的。http://lua-users.org/wiki/GarbageCollectionTutorial

2014-02-21 00:14:24
用户11649
用户11649

当出现峰值时,第一个嫌疑人是垃圾回收器。第一个最简单的“解决”方法不是禁用它,而是在可预测的时间调用它。

尝试在帧处理结束时仅调用一次 collectgarbage()collectgarbage('step')

2015-05-20 15:58:56