LuaInterface C#: dostring vs dofile. Стоит ли загружать скрипт, который будет многократно вызываться в память?
Может кто-нибудь сказать мне, могу ли я разумно ожидать какого-либо выигрыша в производительности, загружая скрипт lua, который будет повторно вызываться в память для выполнения через LuaInterface dostring()
функциональность, а не dofile()
?
Правильно ли я считаю, что это будет работать лучше, уменьшая доступ к файловой системе на каждой итерации?
Есть ли какой-нибудь способ кэширования скрипта в Lua VM?
2 ответа
Если вы хотите выполнить некоторый код lua много раз, лучше использовать LoadFile ИЛИ 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. Потому что это требует всего один раз компиляции.
Правильно ли я считаю, что это будет работать лучше, уменьшая доступ к файловой системе на каждой итерации?
В общем, вы должны тестировать, а не предполагать, но это довольно сложно: "IO диска, скомпилируйте, выполните" vs "выполните". Конечно, последний будет быстрее.
Есть ли какой-нибудь способ кэширования скрипта в Lua VM?
Ли ты dofile
или же dostring
любые глобальные переменные, которые создает ваш скрипт, будут доступны для чтения / вызова. Если вы хотите избежать сценариев, изменяющих глобальное пространство имен виртуальной машины, вы можете предоставить подпрограмму API (на хосте), которую ваш сценарий может вызывать для регистрации обратного вызова.