我正在开发一款游戏,我使用(SFML)C ++作为核心,Lua作为演员脚本。但是,我遇到了一些性能问题,我不确定会出现什么问题。我已经创建了一个测试程序来显示我遇到的问题。
基本上,有时当我从C ++调用Lua函数时,返回的时间比平常要长得多。我需要我的游戏以60 fps运行,并且大部分时间都会运行,但偶尔会有一个或多个函数调用比平常花费更长的时间。
我的第一个想法是它是内存管理器,但关闭它似乎并没有摆脱尖峰。我知道有几个游戏使用Lua,我想这对他们来说不是问题。
人们建议使用LuaJIT可以解决问题,所以我下载并设置了LuaJIT(使用lua 5.1)。我的平均时间得到了显着改善,但是峰值与以往一样普遍:
控制台结果的2个示例的图库(以微秒为单位;作为参考,我认为60 fps的帧为~16700):
gc off gc on
C ++测试程序 - http://pastebin.com/RhYnnLm3
Lua测试脚本 - http://pastebin.com/NBnAXcVD
答案 0 :(得分:1)
看起来你正在体验LUAs垃圾收集器在你的一些电话上滚动。通常在游戏中,您需要非常关注GC的运行方式以及运行频率。一个简单的解决方案可能是每帧手动运行GC一次。我知道一些流行的游戏引擎就是这样做的。 http://lua-users.org/wiki/GarbageCollectionTutorial
答案 1 :(得分:0)
第一个有这些尖峰的嫌疑人是垃圾收集器。首先尝试的最简单的“修复”不是禁用它,而是在可预测的时间调用它。
在帧处理结束时尝试拨打collectgarbage()
或collectgarbate('step')
。