[英]Lua optimize memory
我要優化我的代碼。 我有3個選項,不知道哪個更適合Lua中的內存:
1)
local Test = {}
Test.var1 = function ()
-- Code
end
Test.var2 = function ()
-- Code
end
2)或
function var1()
-- Code
end
function var2()
-- Code
end
3)或者也許吧
local var1 = function ()
-- Code
end
local var2 = function ()
-- Code
end
引用Lua Programming Gem ,程序優化的兩個格言:
回到你的例子,第二段代碼有點糟糕,因為對全局代碼的訪問速度較慢。 但性能差異難以察覺。
這取決於您的需求,第一個使用額外的表而不是第三個,但命名空間更清晰。
沒有人會真正影響內存,除非在#1中使用表(所以每個條目大約40個字節+一些)。
如果你想要它的性能,那么假設你可以在本地范圍內訪問所述函數,則選項#3要好得多。
如果它是關於內存使用而不是處理,並且你正在使用面向對象的編程,你正在實例化上面顯示的多個Test
實例,那么你有第四個選項與metatables。
TestMt = {}
TestMt.func1 = function(self, ...)
...
end
TestMt.func2 = function(self, ...)
...
end
TestMt.func3 = function(self, ...)
...
end
function new_test()
local t = {}
t.data = ...
setmetatable(t, {__index = TestMt})
return t
end
foo = new_test()
foo:func1()
foo:func2()
foo:func3()
如果您正在進行面向對象的編程,metatables可以大大節省內存(我不小心使用了超過1 GB的數據載體,只需通過使用metatable將其減少到40 MB)。
如果它不是關於多次實例化的對象和表,而是關於組織全局可訪問的函數,那么擔心內存就太荒謬了。 這就像將整個lua代碼放入一個文件中以減少文件系統開銷。 你說的是這種微不足道的節省,你真的需要一個非常精確的測量支持的特殊用例,甚至可以關注你自己。
如果它是關於處理的,那么你可以通過將全局函數保留在嵌套表之外,並在可能的情況下支持本地函數來獲得一些小的改進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.