我正在开发一款游戏,我使用(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
您似乎在某些调用中遇到了 LUA 垃圾收集器的情况。通常在游戏中,您需要密切关注 GC 的运行方式及其运行频率。一个简单的解决方案可能是每帧手动运行一次 GC。我所知道的一些流行的游戏引擎就是这样做的。 http://lua-users.org/wiki/GarbageCollectionTutorial
归档时间: |
|
查看次数: |
519 次 |
最近记录: |