簡體   English   中英

Lua優化內存

[英]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:不要這樣做。
  • 規則#2:不要這樣做。 (僅限專家)

回到你的例子,第二段代碼有點糟糕,因為對全局代碼的訪問速度較慢。 但性能差異難以察覺。

這取決於您的需求,第一個使用額外的表而不是第三個,但命名空間更清晰。

沒有人會真正影響內存,除非在#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM