【问题标题】:Lua - What is the most optimized method of a Lua function?Lua - Lua 函数最优化的方法是什么?
【发布时间】:2015-02-04 08:55:48
【问题描述】:

我在问问题之前进行了搜索。 我有两种方法来制作循环。我想知道两者哪个更优化。也许你能找到更好的。 目标是每 1 秒循环一次。这已经奏效了。

感谢您有时间解释。哪一个是最好的。在提出第三种选择之前。

  • 我的方法一:

    content=0
    function loop1()
        content=content+1
    end
    
    timer.Create("myloop",1,0,function() loop1() end)
    
  • 我的方法2:

    content=0    
    Table={
        loop1=function()
            content=content+1
        end
    }
    
    timer.Create("myloop",1,0,function() Table:loop1() end)
    

编辑:

  • 我的方法3:

    content=0    
    timer.Create("myloop",1,0,function() content=content+1 end)
    

图例: timer.Create = 无限循环中的 0。 timer.Create = 启动函数中的 1 个,每秒 1 个。

函数的内容被一些似乎对基础没有帮助的东西简化了。但我感兴趣的是基本方法。

【问题讨论】:

  • 除了在函数中不必要的包装之外,您还过早地进行了优化——尝试从每只运行一次的东西中减少周期是没有意义的。
  • 抱歉英语不是我的母语。如果我理解,内容是为了简化我的要求。真正的内容是大了才明白一个方法。

标签: loops optimization lua


【解决方案1】:

将函数放入表中没有任何好处,并且会强制进行额外的表查找。

timer.Create 调用中添加额外的包装(未命名)函数也不是一件有用的事情,因为它只会为进程增加额外的函数调用开销。

使用局部变量总是比使用全局变量更好。

以下内容可能是最好的:

local content = 0
local function loop1()
    content = content + 1
end

timer.Create("myloop", 1, 0, loop1)

【讨论】:

  • 非常感谢您的快速回复。我喜欢做实验。我立即应用它。感谢您有同样的机会编辑我的帖子。这样写有性能差异吗?
  • 这一小段代码可能和你能得到的一样好,但正如@BenGrimm 在对操作的评论中所说,这闻起来非常像过早的优化。从长远来看,这个问题的可能性微乎其微,尤其是当你的函数做了任何实际有用的事情时。
  • 我不知道其他方法。图例:timer.Create = infinit 循环中的 0。 timer.Create 中的 1 = 启动函数,每秒 1 次。函数的内容被一些似乎对基础没有帮助的东西简化了。但我感兴趣的是基本方法。
  • BenGrimm 的观点是,除非您知道这两种选择之间的差异会影响您的运行时间,否则这种讨论/检查并不是很有用。这种差异在实际程序中很重要的可能性很小,因为正在完成的实际工作可能远远超过这里的差异。
  • 我需要节省最多的资源。在我使用方法 2 之前,我的循环是 0.1 秒的循环。真的没有一秒钟。当我发布时,我想保持简单。你的回答帮助我有所作为。我应用了所有可以优化的东西。我已经编辑了我的旧系统并且没有使用存储在另一个函数调用的表中的函数。我认为它总是比旧系统更好。
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2011-03-05
  • 2013-10-11
  • 1970-01-01
  • 2016-01-01
相关资源
最近更新 更多