C# 哪个性能更好?新运算符与新结构的声明和赋值?

C# 哪个性能更好?新运算符与新结构的声明和赋值?,c#,unity3d,C#,Unity3d,我正在完成一个关于unity的教程,遇到了一段我本应该复制到编辑器选项1中的代码。我想知道我在选项2中使用新操作符的性能是否比建议的代码好 void Update() { Option1(); //or Option2(); } private void Option1() { Vector2 position = transform.position; position.x = position.x + 0.1f; transform.posi

我正在完成一个关于unity的教程,遇到了一段我本应该复制到编辑器选项1中的代码。我想知道我在选项2中使用新操作符的性能是否比建议的代码好

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

}

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

如果我们分解代码的其余部分,您可以将代码视为一系列运算符,每个运算符都是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个动作

基于将行动概括到同一时间,选项2将花费选项1所需时间的2/3


注意:对于今天的处理器来说,这是一个微不足道的数字,除非你每帧计算1000多次以上,否则这无关紧要。

你可以看看这篇文章

据我所知,如果你能执行你的任务,避免新的,应该是更优化的。而不是新的本身,因为您触发了垃圾收集器。 通过引用使用指针、避免副本和实例总是更快,但是对于小项目来说并不是什么大问题,我在列表中更关心的是如何让事情顺利进行。 就我所遇到的情况而言,在大型项目中,在性能方面应该考虑的是在虚拟现实中保持稳定的帧速率,主要是小心滥用协程


希望有帮助

这就需要速度咆哮:这些都不一样,这真的很重要,你面临的问题是什么?还有transform.position+=newvector20.1f,0f;你甚至可以把这个向量设为常数。我不担心性能,只担心正确性和可读性。我先试过了,但它会带来以下错误消息:运算符“+=”在“Vector3”和“Vector2”类型的操作数上不明确。由于Vector2是一个结构,内存分配和垃圾回收不是什么大问题。我没有说它们是个问题,我同意不同之处是无关紧要的。然而,如果问题是一种选择是否比另一种更有效,我会说这是有区别的