为什么t [#t + 1] = e比table.insert(t,e)快?

时间:2016-07-13 07:46:34

标签: optimization lua lua-table

我需要知道哪种方法更快,因为我需要在性能很重要的项目中的表中插入元素。我运行了以下代码:

local total = 0

local mytable = {}

for i = 1, 1e7 do
    local clock = os.clock
    local push = table.insert
    local t = clock()

    push(mytable, 0)

    t = clock() - t
    total = total + t
end

print("table.insert: "..total)

local total = 0

local mytable = {}

for i = 1, 1e7 do
    local clock = os.clock
    local t = clock()

    mytable[#mytable + 1] = 0

    t = clock() - t
    total = total + t
end

print("Manual approach: "..total)

事实证明,第二种方法的运行速度比第一种方法快2秒。

我理解第一个是函数调用,但相比之下,第二个调用#运算符,执行添加,然后为值分配索引,所有这些都在Lua端,其中第一个是在C方面做的。

那么为什么第二种方法更快呢?功能真的那么慢吗?

1 个答案:

答案 0 :(得分:0)

因为函数调用。 显示下一个代码。此代码基于您的代码。

function insert(t, v)
    t[#t + 1] = v
end

for i = 1, 1e7 do
    local clock = os.clock
    local t = clock()

    --mytable[#mytable + 1] = 0
    insert(mytable, 0)

    t = clock() - t
    total = total + t
end

代码工作原理相同,但增加到一个函数调用。

结果时间是    table.insert:4.705

手动方法:4.752< - 插入功能