我正在开发一个游戏,其中核心使用(SFML) C++,演员脚本使用Lua。然而,我遇到了一些性能问题,不确定出了什么问题。我创建了一个测试程序来展示我遇到的问题。
基本上,有时当我从C++调用Lua函数时,它需要比平常更长的时间才能返回。我需要我的游戏以60fps运行,大多数情况下它能做到,但有时一个或多个函数调用将比平常花费更长的时间。
我的第一个想法是内存管理器,但关闭它似乎并没有消除这些峰值。我知道有几款游戏使用Lua,我想这对他们来说不是问题。
人们建议使用LuaJIT可以解决这个问题,所以我下载并设置了LuaJIT(带有lua 5.1)。我得到了明显改善的平均时间,但峰值仍然像以前一样普遍存在:
基本上,有时当我从C++调用Lua函数时,它需要比平常更长的时间才能返回。我需要我的游戏以60fps运行,大多数情况下它能做到,但有时一个或多个函数调用将比平常花费更长的时间。
我的第一个想法是内存管理器,但关闭它似乎并没有消除这些峰值。我知道有几款游戏使用Lua,我想这对他们来说不是问题。
人们建议使用LuaJIT可以解决这个问题,所以我下载并设置了LuaJIT(带有lua 5.1)。我得到了明显改善的平均时间,但峰值仍然像以前一样普遍存在:
以下是两个控制台结果示例的图库(以微秒为单位;参考帧速率为60 fps,大约为16700):
关闭垃圾回收
开启垃圾回收
C++测试程序 - http://pastebin.com/RhYnnLm3
Lua测试脚本 - http://pastebin.com/NBnAXcVD
clock
)会出现相同的尖峰模式? - Ryan Stein