使用 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("Entity updated ", id, " ", dt)
end
在一个循环中(单个游戏帧)大约需要:
- 使用 Windows*的128个实体为 0.2 秒
- 使用 Linux 的8096实体需要 0.2 秒**
使 Windows 的构建速度比 Linux 慢大约 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 部分中提供日志记录实用程序会很棒,但即使是调试,这对于实时应用程序来说也太慢了。
另:更改标题