1

使用 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 部分中提供日志记录实用程序会很棒,但即使是调试,这对于实时应用程序来说也太慢了。

另:更改标题

4

0 回答 0