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 (на хосте), которую ваш сценарий может вызывать для регистрации обратного вызова.

Другие вопросы по тегам