具有C ++性能问题的Lua /滞后峰值

时间:2013-12-06 22:18:14

标签: c++ lua

我正在开发一款游戏,我使用(SFML)C ++作为核心,Lua作为演员脚本。但是,我遇到了一些性能问题,我不确定会出现什么问题。我已经创建了一个测试程序来显示我遇到的问题。

基本上,有时当我从C ++调用Lua函数时,返回的时间比平常要长得多。我需要我的游戏以60 fps运行,并且大部分时间都会运行,但偶尔会有一个或多个函数调用比平常花费更长的时间。

我的第一个想法是它是内存管理器,但关闭它似乎并没有摆脱尖峰。我知道有几个游戏使用Lua,我想这对他们来说不是问题。

人们建议使用LuaJIT可以解决问题,所以我下载并设置了LuaJIT(使用lua 5.1)。我的平均时间得到了显着改善,但是峰值与以往一样普遍:

enter image description here

控制台结果的2个示例的图库(以微秒为单位;作为参考,我认为60 fps的帧为~16700):

gc off gc disabled gc on gc enabled

C ++测试程序 - http://pastebin.com/RhYnnLm3
Lua测试脚本 - http://pastebin.com/NBnAXcVD

2 个答案:

答案 0 :(得分:1)

看起来你正在体验LUAs垃圾收集器在你的一些电话上滚动。通常在游戏中,您需要非常关注GC的运行方式以及运行频率。一个简单的解决方案可能是每帧手动运行GC一次。我知道一些流行的游戏引擎就是这样做的。 http://lua-users.org/wiki/GarbageCollectionTutorial

答案 1 :(得分:0)

第一个有这些尖峰的嫌疑人是垃圾收集器。首先尝试的最简单的“修复”不是禁用它,而是在可预测的时间调用它。

在帧处理结束时尝试拨打collectgarbage()collectgarbate('step')