luajit副本表很慢

时间:2015-06-29 15:14:25

标签: memory lua lua-table luajit

在更大的lua脚本中,我必须复制几个表dt:

for i=1,dt:nrow() do
    local r = {}
    for j=1,dt:ncol() do
        r[j] = dt[i][j]
    end     
    rslt:append(r)
end

这些表约有50,000行×25列,主要包含双打。 luajit大约需要10倍"标准" LUA。在我之前做的所有其他计算/操作中,luajit更快(1.5到3次)。

1 个答案:

答案 0 :(得分:0)

听起来很愚蠢,请尝试使用25个值预先分配r表:

local r = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

不幸的是,Lua API不允许预分配表,因此这是避免内循环中数组赋值引起的重新分配的唯一方法。我的测试显示出明显的改善,但不接近10倍(虽然我没有使用你的方法,所以你的结果可能会有所不同)。