使用表来改善cpu使用情况很好吗?

时间:2016-04-21 07:43:28

标签: performance lua

我有一个简单的问题,这可能是一个愚蠢的问题,但我只是想知道......我是初学者的lua。

所以,例如我有2个脚本。

1

local text = ''
local level = getUserLevel(self)

if level < 10 then
text = 'Low level'
elseif level >= 10 and level < 20 then
text = 'Average Level'
elseif level >= 20 and level < 30 then
text = 'High Level'
end
sendMsg(self, text)

2

  local a = {
    b = {
     [{1, 10}] = {text = "Low Level"},
     [{10, 20}] = {text = "Average Level"},
     [{20, 30}] = {text = "High Level"}
    }
  }
for k, v in pairs (a.b) do
if getUserLevel(self) >= k[1] and getUserLevel(self) < k[2] then
sendMsg(self, v.text)
end

不管代码是否更多或更少,哪一个更好地提高cpu使用率?

2 个答案:

答案 0 :(得分:3)

第一个调用getUserLevel一次。第二个叫它六次。这可能是一个决定因素,但一如既往,只需运行并测量。

话虽如此,这些计划并不等同。第二个允许动态更改查找表,而第一个是硬编码的。比较它们有点像苹果和橘子。

最终,我不认为这个功能会成为任何事物的热点。如果不是,则不优化。首先争取最大可读性。就这么简单。

答案 1 :(得分:0)

第一个将比具有过于复杂的表结构的第二个脚本更快,更快(~5倍)。 但是,正如已经说过的,带有表的脚本为您提供了更易于管理的选项,易于更新且不易出错。
虽然它可以更快。由于您具有相邻范围,因此无需检查两个边。数字也比对/ ipairs快。

local lvls = {
    {1, "Low Level"},
    {10, "Average Level"},
    {20, "High Level"}
}

local function search_name(user_level)
    local text
    for i=1,#lvls do
        local level = lvls[i]
        if level[1]>user_level then
            return text
        end
        text = level[2]
    end
end

print(search_name(getUserLevel(self)))

此选项比初始表方法快2倍(getUserLevel移出循环)。