多线程应用程序中的按位操作是否较慢?

时间:2017-04-05 06:46:15

标签: c# unity3d

我想对多线程应用程序中的按位操作提出一些看法。一方面我知道按位操作非常快,但我也听说它强制应用程序在处理可能导致实际性能下降的请求时使用单线程方法。

请考虑以下代码:

public void Swap() {
   var tempObject = new Vector2( y, x);
   this.x = tempObject.x;
   this.y = tempObject.y;
}

这里有几件事困扰我。首先 - 我必须创建一个新对象。需要处理的物体。其次,我觉得将y然后x传递给构造函数可以让程序员首先查看这段代码是否存在拼写错误。虽然这段代码非常简约,但你明白了。

我想重构相同的方法,看起来像这样:

public void Swap() {
    this.x ^= this.y;
    this.y ^= this.x;
    this.x ^= this.y;
}

好消息是没有临时变量(虽然我知道Unity在没有启动庞大的垃圾收集过程的情况下处理得非常好)。它也应该更快。成本是方法不太可读;事实上,不是每个程序员都知道按位命令以及他们做了什么,尽管从方法名称来看它应该是非常明显的。

但它真的更快吗?或者我只是坚持过去,更好的方法是实际创建一个临时变量以获得更好的性能?

1 个答案:

答案 0 :(得分:0)

您不需要创建新对象或执行奇特的二进制算术来交换两个变量。

public void Swap() 
{
   var temp = x;
   x = y;
   y = x;
}

这里有0分配。 temp值只是在堆栈上推送,这对垃圾收集器没有任何压力。