使用表格来改善 CPU 使用情况好吗?

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

例如,我有两个脚本。

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

if level < 10 then
text = '低级别'
elseif level >= 10 and level < 20 then
text = '中级别'
elseif level >= 20 and level < 30 then
text = '高级别'
end
sendMsg(self, text)
  local a = {
    b = {
     [{1, 10}] = {text = "低级别"},
     [{10, 20}] = {text = "中级别"},
     [{20, 30}] = {text = "高级别"}
    }
  }
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 使用情况呢?

点赞
用户752976
用户752976

代码分析

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

话虽如此,这些程序并不等价。第二种方法允许动态更改查找表,而第一种方法是硬编码的。比较它们有点像比较苹果和橙子。

最后,我不认为这个函数会成为任何热点。如果它不是,则不要进行优化。首先要追求最大的可读性。就这么简单。

2016-04-21 08:04:55
用户5675002
用户5675002

第一个脚本将比第二个脚本效率更高,速度显著提升(约为5倍),但是带有过于复杂的表结构的脚本会提供更容易管理、更新和减少错误的选项。

不过,可以通过优化使其更快。由于区间相邻,因此无需检查两个边缘。此外,数字 "for" 比 "pairs/ipairs" 更快。

local lvls = {
    {1, "低等级"},
    {10, "普通等级"},
    {20, "高等级"}
}

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)))

这个选项比您最初的表格处理方法(将 "getUserLevel" 移出循环)快两倍。

2016-04-21 10:37:57