繁体   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