LuaInterface C#:dostring vs dofile。加载一个将被多次调用的脚本到内存中是否值得?

有人能告诉我,如果我通过LuaInterface的**dostring()功能将会被重复调用的lua脚本加载到内存中执行,是否可以合理地期望性能提升,而不是使用dofile()**?

我是否正确地假设,通过减少每次迭代的文件系统访问来实现更好的性能?

是否有一些方式可以在Lua VM中缓存脚本?

点赞
用户501459
用户501459

我假设通过每次迭代减少文件系统访问,性能会更好,这种做法正确吗?

通常,您应该进行基准测试,而不是假设,但这相当明显:“磁盘IO,编译,执行”与“执行”。当然,后者将更快。

有没有一种方法在Lua VM内缓存脚本?

无论您使用dofile或者dostring,您的脚本生成的所有全局变量都可供读/调用。如果要避免您的脚本修改VM全局命名空间,您可以在主机中公开一个API例程,供脚本调用以注册回调。

2013-02-19 23:37:14
用户2039872
用户2039872

如果你想要多次执行一些 Lua 代码,更好的方式是使用 LoadFileLoadString。 将 Lua 代码加载成 LuaFunction,例如:

LuaFunction lf = xxx.LoadString("some lua code");   // xxx 是 LuaInterface 的一个实例
lf.Call();   // 你也可以传递一些参数

这种方式比 DoFileDoString 更快,因为它只需要编译一次。

2013-02-28 14:47:14