Lua 探查器範例

lua-users home
wiki

[!] 版本注意事項:以下程式碼與舊版 Lua 4 有關。無法在 Lua 5 中執行。

tinsert 與 tremove 範例

檢視此程式碼

t={[0]=1}
n=1000

function ins()
    for i = 1, n do
        tinsert(t, i)
    end
end

function rem()
    for i = 1, n do
        tremove(t, 1)
    end
end

ins()
tremove(t, 0)
rem()

執行探查器後,可取得結果圖表

tremovemain 呼叫只為顯示探查器可以在哪個呼叫點找出瓶頸所在)

圖表顯示 tremove 為瓶頸,因為它是唯一的黑盒子。既然 tremove 已經是非常快速的常式,該怎麼辦?不論我們做什麼動作,若要讓程式執行得更快,我們必須專注於從 rem 呼叫 tremove 的情況。閱讀完 tremove 的規格,我們發現它在每個呼叫都會將大於 n 的所有元素都後移一行,這需要花時間在上面。

由於我們不需要任何後移,因此有一個更快速的程式碼可以執行相同的操作

t={[0]=1}
n=1000

function ins()
    for i = 1, n do
        tinsert(t, i)
    end
end

function rem()
    for i = n, 1, -1 do
        tremove(t, n)
    end
end

ins()
tremove(t, 0)
rem()

而圖表顯示沒有其他瓶頸(因為顏色幾乎相同)。事實上,現在的黑盒子是 insrem,所以它們是執行時花費最多時間的函數。

第一步在 Pentium 200 MMX 中執行需要將近一秒,而第二步則只需要不到 0 秒的時間。


最近的變更 · 喜好設定
編輯 · 歷程
最後編輯時間:2007 年 1 月 11 日凌晨 4:27 GMT (差異)