Lua打印性能——Windows和Linux的对比

使用C语言,定义

typedef struct Entity {
    size_t id;
    char *luaFun;
} Entity;

并调用

void LuaEntityUpdate(Entity *entity, double dt) {
    lua_getglobal(L, entity->luaFun);
    lua_pushinteger(L, entity->id);
    lua_pushnumber(L, dt);
    lua_call(L, 2, 0);
}

全局函数(entity->luaFun = "entity_update")

function entity_update(id, dt)
    print("实体更新", id, " ", dt)
end

在循环中(单个游戏帧)大约需要:

  • 在Windows环境下,使用128个实体需要0.2秒*
  • 在Linux环境下,使用8096个实体需要0.2秒**

这使得在Windows环境下构建速度约慢64倍(相同的机器,运行的应用程序减少到最低限度,均使用100%的单核心)。

这种巨大差异的原因是什么?请参见下面的评论和编辑。

\* Windows 10,Mingw-w64,来自:“MingW-W64-builds”,使用Lua 5.3.5二进制版本

\*\* Mint 16,gcc,Lua 5.3.5构建自官方源代码

--编辑

如评论中所建议的,我尝试测量性能而不打印任何信息,BINGO!没有任何打印输出的情况下,性能几乎与Linux构建相当。

现在,我已经尝试用以下方法替换打印输出:

local w = print
w(...)
io.write(...)
local w = io.write
w(...)

但它们的性能都相同。

我还尝试从Windows命令中运行程序,这比在CLion中捕获的控制台快约30%。

有没有什么技巧可以使Windows下的性能更快?最好使lua部分具有日志记录实用程序,但即使用于调试,实时应用程序的速度也太慢了。

同时:已更改标题

点赞