谁能告诉我我是否可以通过加载一个 lua 脚本来合理地期望任何性能提升,该脚本将被重复调用到内存中以通过 LuaInterface 的dostring()
功能而不是执行来执行dofile()
?
我是否正确地假设这会通过减少每次迭代的文件系统访问来更好地执行?
有没有办法在Lua VM中缓存脚本?
谁能告诉我我是否可以通过加载一个 lua 脚本来合理地期望任何性能提升,该脚本将被重复调用到内存中以通过 LuaInterface 的dostring()
功能而不是执行来执行dofile()
?
我是否正确地假设这会通过减少每次迭代的文件系统访问来更好地执行?
有没有办法在Lua VM中缓存脚本?
我是否正确地假设这会通过减少每次迭代的文件系统访问来更好地执行?
通常,您应该进行基准测试而不是假设,但这非常简单:“磁盘 IO,编译,执行”与“执行”。当然后者会更快。
有没有办法在 Lua VM 中缓存脚本?
无论您dofile
还是dostring
您的脚本生成的任何全局变量都可供您阅读/调用。如果您想避免您的脚本修改 VM 的全局命名空间,您可以公开一个 API 例程(在主机中),您的脚本可以调用该例程来注册回调。
如果你想多次执行一些lua代码,更好的方法是使用LoadFile OR LoadString。将 lua 代码加载为 LuaFunction,例如:
LuaFunction lf = xxx.LoadString("some lua code"); // xxx is an instance of LuaInterface
lf.Call(); // you can also deliver some arguments
这比 DoFile 和 DoString 快得多。因为它只需要编译一次。