首页 > 解决方案 > 哪个性能更高?新运算符与新结构的声明和分配?

问题描述

我正在完成一个关于统一的教程,并遇到了我应该复制到编辑器中的一段代码(选项 1) 我想知道我在选项 2 中使用 new 运算符的性能是否比建议的更高或更低代码。

void Update()
{
    Option1();
    //or
    Option2();
}

private void Option1()
{
    Vector2 position = transform.position;
    position.x = position.x + 0.1f;
    transform.position = position;
}

private void Option2()
{
    transform.position = new Vector2(transform.position.x + .1f, transform.position.y);
}

}

标签: c#unity3d

解决方案


从技术上讲,在选项 1 中,您正在创建变量 'Vector2 position = transform.position;' 的新实例 这意味着您以与 Option2 相同的方式为信息分配内存空间。

如果我们分解其余代码,您可以将代码视为一系列运算符,每个运算符都是 CPU 进行的跳转/计算。

分解选项1:

private void Option1()
{
    // Memory allocation, =, and reference call '.'
    Vector2 position = transform.position;
   // Reference call, =, reference call, +
    position.x = position.x + 0.1f;
    // reference call, =
    transform.position = position;
}

通过这些让我们说“他们需要相同的处理时间”,所以发生了 9 个动作。

分解选项2:

private void Option2()
{
    // Reference call, =, memory allocation, reference call, +, reference call);
    transform.position = new Vector2(transform.position.x + .1f, transform.position.y);
}

通过这些让我们说“他们需要相同的处理时间”,所以发生了 6 个动作。

基于将动作概括到同一时间,Option2 将花费 Option1 的 2/3 时间。

注意:对于当今的处理器来说,这是一个微不足道的数字,除非您每帧进行 1,000 次以上的计算,否则这无关紧要。


推荐阅读