Lua Unpack 效能評比

365bet体育在线直播 2025-12-23 12:12:29 admin 访问量: 8348 评分: 247
Lua Unpack 效能評比

在使用 lua 的 unpack 語法一定要特別注意,如果已經知道參數的數量,那會強烈建議不要使用 unpack。

測試條件

迴圈執行次數 一百萬 次

table 長度 5

選手一 unpack12345local style1 = function() for i=1, loopCount do local v1,v2,v3,v4,v5 = table.unpack(table_a) endend

選手二 get value directly123456789local style2 = function() for i=1, loopCount do local v1 = table_a[1] local v2 = table_a[2] local v3 = table_a[3] local v4 = table_a[4] local v5 = table_a[5] endend

結果12elapsed: 75.28 ms // style1: unpackelapsed: 0.40 ms // style2

結論如果已經確定知道長度,還是不要使用 unpack 語法,可以看到效率是差到百倍以上。

有的人想到可以使用 # 來取得長度,是也是沒錯,但是要確保丟入參數沒有 nil,不然會算錯。

演示: length of table準備了一組含有 nil 的測試資料…

12345678testTable = { {'value1'}, {'value1', 2}, {'value1', nil}, {'value1', nil, 3}, {nil}, {1}, {1,2}, {1,2,nil}}for i=1, #testTable do print(string.format('%d: %d', i, #testTable[i]))end

結果:

123456781: 12: 23: 1 //{'value1', nil}4: 1 //{'value1', nil, 3}5: 06: 17: 28: 2 // {1,2,nil}

從結果來看,如果不能保證沒有 nil,就還是盡量避免使用 # 取得長度。*還是有方法可以算出正確的長度,但效能上不見得值得

完整 Code12345678910111213141516171819202122232425262728293031323334353637loopCount = 1000000 --100萬table_a = {'value1','value2','value3','value4','value5'}require "socket"local style1 = function() for i=1, loopCount do local v1,v2,v3,v4,v5 = table.unpack(table_a) endendlocal style2 = function() for i=1, loopCount do local v1 = table_a[1] local v2 = table_a[2] local v3 = table_a[3] local v4 = table_a[4] local v5 = table_a[5] endendlocal measureTimeFunction = function(func) clock_x = socket.gettime() func() print(string.format('elapsed: %.2f ms', (socket.gettime() - clock_x)*1000 ))endmeasureTimeFunction(style1)measureTimeFunction(style2)testTable = { {'value1'}, {'value1', 2}, {'value1', nil}, {'value1', nil, 3}, {nil}, {1}, {1,2}, {1,2,nil}}for i=1, #testTable do print(string.format('%d: %d', i, #testTable[i]))end

相关数据

防止脱发的最好方法有哪些
365bet世界杯足球

防止脱发的最好方法有哪些

10-14 ↗ 8283
遇到偏心的老板,是好事还是坏事?
365bet世界杯足球

遇到偏心的老板,是好事还是坏事?

09-07 ↗ 747
拍蚊子有哪些技巧?
365bet世界杯足球

拍蚊子有哪些技巧?

10-11 ↗ 2666
入伏麋鹿度夏有妙招
365bet体育在线直播

入伏麋鹿度夏有妙招

09-06 ↗ 7052
形容十分喜爱某一事物成语不离手(什么不离手)
365bet体育在线直播

形容十分喜爱某一事物成语不离手(什么不离手)

09-16 ↗ 6331
PSV 2000 3.68降级3.60固化教程
365bet体育在线直播

PSV 2000 3.68降级3.60固化教程

09-20 ↗ 494