Lua 探查器範例 |
|
檢視此程式碼
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()
執行探查器後,可取得結果圖表
(tremove 從 main 呼叫只為顯示探查器可以在哪個呼叫點找出瓶頸所在)
圖表顯示 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()
而圖表顯示沒有其他瓶頸(因為顏色幾乎相同)。事實上,現在的黑盒子是 ins 和 rem,所以它們是執行時花費最多時間的函數。
第一步在 Pentium 200 MMX 中執行需要將近一秒,而第二步則只需要不到 0 秒的時間。