C# - 比较 2 个浮点数是一项昂贵的操作

本文关键字:一项 操作 比较 浮点数 | 更新日期: 2023-09-27 18:35:51

使用 Unity 的更新方法,我想知道比较 2 个浮点数是否比简单地设置 Unity 滑块值更昂贵或更便宜。例如:

void Update()
    {
        if (oldValue != _currentValue) // This being the comparison of 2 floats
        {
            _chargeBar.value = _currentValue;
        }
    }

void Update()
    {          
        _chargeBar.value = _currentValue;          
    }

让我解释一下发生了什么。我有一个 Unity UI 滑块,我正在更新该值。我只想在我的 2 个浮点数不同时才更新值。但是,如果与比较 2 个浮点数相比更便宜,我可以每次更新更新滑块值是高精度的。无论哪种方式,都必须在每一帧结束时进行评估。我只想知道哪个会更好。或者另一种方法。谢谢

C# - 比较 2 个浮点数是一项昂贵的操作

比较速度很快,但如果语句不是因为处理器在管道中同时执行多个命令。如果存在像 if 语句这样的条件跳转,则处理器需要在确定分支方向之前开始执行其他分支。如果意识到所选分支是错误的分支,则需要刷新其中的所有指令。刷新后,将执行另一个分支,但这比首先正确预测分支花费的时间要长得多。

另一方面,优化是毫无意义的,因为绘制调用很可能在每一帧上进行。这是因为很容易用背景颜色清除整个框架并再次绘制所有内容。当然,如果 UI 中有任何透明度,则需要在每一帧上进行绘制调用。在这种情况下,需要将透明 UI 绘制为其他所有元素之上的最后一个元素。

此外,如果此优化确实有用,则很可能已经在 Unity 的 UI 滑块内置绘制函数中实现。