LUA 打印的性能开销

来源:互联网 发布:雅诗兰黛眼霜 知乎 编辑:程序博客网 时间:2024/05/30 23:34
local function fun1()    local t = {1,2,3,4,5,6,7,8,9,0}    for i = 1, 1000000 do        print(table.concat(t))    end;end;local function fun2()    local t = {"1","2","3","4","5","6","7","8","9","0"}    for i = 1, 1000000 do        print(table.concat(t))    end;end;local function fun3()    local t = {0,1,2,3,4,5,6,7,8,9}    for i = 1, 1000000 do        print(t[1] * 1000000000            + t[2] * 100000000            + t[3] * 10000000            + t[4] * 1000000            + t[5] * 100000            + t[6] * 10000            + t[7] * 1000            + t[8] * 100            + t[9] * 10            + t[10])    endend;local function fun4()    local t = {1,2,3,4,5,6,7,8,9,0}    for i = 1, 1000000 do        print(            string.format("%d%d%d%d%d%d%d%d%d%d",            t[1], t[2], t[3], t[4], t[5],            t[6], t[7], t[8], t[9], t[10])        )    endendlocal function fun5()    local t = {1,2,3,4,5,6,7,8,9,0}    for i = 1, 1000000 do        print(t[1] .. t[2] .. t[3] .. t[4] .. t[5] .. t[6] .. t[7] .. t[8] .. t[9] .. t[10]);    end;endlocal function fun6()    local t = {1,2,3,4,5,6,7,8,9,0}    for i = 1, 1000000 do        for j = 1, 10 do            io.write(t[j])        end;        io.write("\n");    end;end;local function fun7()    local t = {1,2,3,4,5,6,7,8,9,0}    local data = {}    for i = 1, 1000000 do        table.insert(data,   string.format("%d%d%d%d%d%d%d%d%d%d",            t[1], t[2], t[3], t[4], t[5],            t[6], t[7], t[8], t[9], t[10])        )    end;    print(table.concat(data, "\n"));end;local function fun8()    local t = {1,2,3,4,5,6,7,8,9,0}    local data = {}    for i = 1, 1000000 do        table.insert(data, table.concat(t))    end;    print(table.concat(data, "\n"));end;-- 运行结果local o = os.time();-- fun1(); -- 5.6s-- fun2(); -- 0.7s-- fun3(): -- 1.2s-- fun4(); -- 1.8s-- fun5(); -- 5.5s-- fun6(); -- 6.6s-- fun7(); -- 1.5s-- fun8(); -- 5.2sprint("时间开销" .. (os.time() - o) .. "秒");

得出结论. 数据量不大的时候  table.concat 其实 和 ".." 性能差不多.

大部分开销会损耗在  tostring 上,  如果不能事先进行转换, 使用 string.format 会好的多